Getting an error is usually unpleasant, but sometimes it is also unpleasant when you expect one and do not get it. My parser does not generate error for this string “2)”. please suggest me a solution?
grammar BasicArithmetic;
options {
language = Java;
output = AST;
}
expression returns [double value]:
p1=pm{$value=$pm.value;};
// never never reference FRAGMENTS from parsers
pm returns [double value]:
p1=dm{$value = $p1.value;}
(PLUS^p2=dm{$value += $p2.value;}|
MINUS^p2=dm{$value -= $p2.value;}
)*;
dm returns [double value]:
p1=atom {$value = $p1.value;}
( DIV^ p2=atom {$value /= $p2.value;}|
MUL^ p2=atom {$value *= $p2.value;}|
POW^ p2=atom {$value = Math.pow($value, $p2.value);}
)*;
atom returns [double value]:
p1=Number {$value = Double.parseDouble($p1.text);}
| LP p2=pm RP{$value = $p2.value;};
Number: Digit+;
MUL : '*';
DIV : '/';
PLUS : '+';
MINUS : '-';
POW : '^';
LP : '(';
RP : ')';
fragment Digit:'0'..'9';
WS :('\t'| ' '| '\r'| '\n'| '\u000C')+{$channel = HIDDEN;};
You need to change your grammar to specify that you expect an
EOFtoken after your top-level rule finishes: