java - ANTLR:循环与字符 '%' 处的任何内容都不匹配

标签 java regex parsing antlr lexer

我的 ANTLR 语法如下所示。

grammar ProgCalc;

options {
  language = Java;
  ASTLabelType=CommonTree;
  output=AST;
  backtrack=true;
}

/* Parser rules */
eval
  : exp=add;

add
  : term ( PLUS^ term | MINUS^ term ) *;

term
  : factor ( MULT^ factor | MOD^ factor )*;

factor
  : number 
  | VARIABLE
  | '('! add^ ')'!
  ;

number
  : DEC | HEX | OCT;

/* Lexer Rules*/
VARIABLE: ('a'..'z' |'A'..'Z')('a'..'z'|'A'..'Z' | '0'..'9'|'_')* ;
DEC     : ('1'..'9')('0'..'9')+;
HEX     : '0x' ('0'..'9' | 'a'..'f' | 'A'..'F')+;
OCT     : '0' ('0'..'7')*;

PLUS    : '+';
MINUS   : '-';
MULT    : '*';
MOD     : '%';

WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; };

编译成功。 但当我用表达式解析时(例如 5%3*5),我收到错误。

line 1:1 required (...)+ loop did not match anything at character '%'
line 1:3 required (...)+ loop did not match anything at character '*'
line 1:5 required (...)+ loop did not match anything at character '<EOF>'
line 1:5 no viable alternative at input '<EOF>'

有人可以检查我的语法并纠正它吗? 非常感谢。

最佳答案

由于 + 运算符,您的 DEC 词法分析器规则需要至少 2 位数字。我相信你的意思是写:

DEC : ('1'..'9') ('0'..'9')*;

关于java - ANTLR:循环与字符 '%' 处的任何内容都不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20246781/

相关文章:

java - 将 string.xml 中的值从一个 Activity 传递到另一个 Activity ?

regex - minizinc pentominoes 常规约束示例如何工作?

regex - 如何使用 Perl 正则表达式解析表示递归数据结构的字符串?

javascript - Google Script 解析文本

python如何将css文件解析为键值

c++ - 如何使用 {} block C++ 解析文件

java - 修复java中的nullpointerException错误

java - Maven surefire 插件不检测 Junit5 测试

sql - 如何在 PostgreSQL 中获取字符串中正则表达式匹配的位置?

java - String[][] 出现越界异常错误