From 0e9f782a05ab9bc892af40abef84346a16d3baec Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Tue, 26 May 2009 23:45:44 -0500 Subject: Added % suffix operator, as in "$1.00 * 10%" --- src/parser.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/parser.cc') diff --git a/src/parser.cc b/src/parser.cc index 39004758..1c78e30d 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -44,10 +44,23 @@ expr_t::parser_t::parse_value_term(std::istream& in, token_t& tok = next_token(in, tflags); switch (tok.kind) { - case token_t::VALUE: + case token_t::VALUE: { node = new op_t(op_t::VALUE); node->set_value(tok.value); + + token_t& postfix_tok = next_token(in, tflags.plus_flags(PARSE_OP_CONTEXT)); + if (postfix_tok.kind == token_t::PERCENT) { + ptr_op_t prev(node); + node = new op_t(op_t::O_DIV); + node->set_left(prev); + ptr_op_t hundred = new op_t(op_t::VALUE); + hundred->set_value(100L); + node->set_right(hundred); + } else { + push_token(postfix_tok); + } break; + } case token_t::IDENT: { string ident = tok.value.as_string(); -- cgit v1.2.3