Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ANTLR:循环与字符';%处的任何内容都不匹配';_Java_Regex_Parsing_Antlr_Lexer - Fatal编程技术网

Java 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

我的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)解析时,我得到了一个错误

第1:1行必需(…)+循环与字符“%”处的任何内容都不匹配
第1:3行必需(…)+循环与字符“*”处的任何内容都不匹配
第1:5行必需(…)+循环与字符“”处的任何内容都不匹配
第1行:5输入“”处无可行的替代方案
谁能检查一下我的语法并改正一下吗?
非常感谢。

由于
+
运算符的原因,您的
DEC
lexer规则至少需要2位数字。我相信你是想写:

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