3

我使用 ANTLR 2.7 创建语法来解析简单的表达式,例如

1
2%
(3%)
(4)
((5))
((6%))

它是简单的数字,可以有括号和可选的百分比字符

我的语法如下所示:

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

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

请注意,我正在处理一个很久以前用这个版本实现的项目,我只是在扩展现有的东西。

4

0 回答 0