带有可选令牌的我的ANTLR语法在简单语句上失败

时间:2015-12-15 13:12:11

标签: java parsing grammar antlr2

我使用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^,那么我可以解析一个数字(但显然不是其他表达式)。

我不明白为什么我不能用这个语法解析一个数字..?

请注意,我正在开发一个很久以前使用此版本实现的项目,我只是扩展了现有的东西。

0 个答案:

没有答案
相关问题