summaryrefslogtreecommitdiff
path: root/src/parser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.cc')
-rw-r--r--src/parser.cc15
1 files changed, 14 insertions, 1 deletions
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();