Java ANTLR:循环与字符';%处的任何内容都不匹配';
我的ANTLR语法是这样的Java ANTLR:循环与字符';%处的任何内容都不匹配';,java,regex,parsing,antlr,lexer,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^ fact
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)解析时,我得到了一个错误
第1:1行必需(…)+循环与字符“%”处的任何内容都不匹配
第1:3行必需(…)+循环与字符“*”处的任何内容都不匹配
第1:5行必需(…)+循环与字符“”处的任何内容都不匹配
第1行:5输入“”处无可行的替代方案
谁能检查一下我的语法并改正一下吗?
非常感谢。由于
+
运算符的原因,您的DEC
lexer规则至少需要2位数字。我相信你是想写:
DEC : ('1'..'9') ('0'..'9')*;
DEC : ('1'..'9') ('0'..'9')*;