我使用ANTLR 2.7来创建语法来解析像
这样的简单表达式1
2%
(3%)
(4)
((5))
((6%))
这是简单的数字,可以有paranthesis和可选的百分比字符
我的语法看起来像这样:
class MyParser extends Parser;
options {
k=2;
buildAST = true;
}
parexpr
: variable
| LPAREN^ parexpr RPAREN!
;
variable
: (NUMBER PCT) => NUMBER PCT^
| NUMBER
;
class MyLexer extends Lexer;
options {
k=6;
}
LPAREN: '(';
RPAREN: ')';
DOT: '.';
PCT: '%';
protected
DIGIT: '0'..'9';
NUMBER: (DIGIT)+ (DOT (DIGIT)+)*;
我可以成功解析例如。
(1)
(2%)
但它无法解析单个数字:
1
如果我删除了| LPAREN^ parexpr RPAREN!
或: (NUMBER PCT) => NUMBER PCT^
,那么我可以解析一个数字(但显然不是其他表达式)。
我不明白为什么我不能用这个语法解析一个数字..?
请注意,我正在开发一个很久以前使用此版本实现的项目,我只是扩展了现有的东西。