【问题标题】:Define a rule for double-type in ANTLR v4在 ANTLR v4 中定义双重类型的规则
【发布时间】:2015-10-23 10:21:28
【问题描述】:

写了这个语法(*.g4):

ID  : [a-zA-Z]+;
INT : [0-9];
DBL : INT+ (PT INT+)?;    
PT  : '.';
...

prog: stat+;
stat: expr NEWLINE              # printExpr
    | ID EQL expr NEWLINE       # assign
    | 'clear'                   # clear
    | NEWLINE                   # blank
    ;

expr: expr op=(MUL|DIV) expr    # MulDiv
    | expr op=(ADD|SUB) expr    # AddSub
    | DBL                       # double
    | ID                        # id
    | LBR expr RBR              # parens
    ;

我的 ANTLR 和 Java 文件编译没有问题,但是如果我运行这个输入:

193.2
a =5.2
b= 6
c= a+b*2.2
c

b= 6 存在问题第 3:3 行在输入“6”处没有可行的替代方案 然后是nullPointerException 上的visit()

我认为我的 expr 规则中可能存在一些歧义。

我做错了什么?

【问题讨论】:

  • 提示:6.1 正在运行。但是 6 不也是双倍 (6.0) 吗?

标签: java metaprogramming antlr4


【解决方案1】:

发现问题了! 将我之前的DBL 定义为:

dbl : INT+ PT INT+
    | PT INT+
    | INT+
    ;

成功了!!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多