[英]Java ANTLR4 mismatched input '<EOF>' expecting KEY
I'm trying to define a simple grammar to parse expressions like 我正在尝试定义一个简单的语法来解析像
s=1,b=2
or 要么
s=1,b=[1,2,3]
The grammar is (not full): 语法是(不完整的):
grammar KeyVal;
program : exprs EOF ;
exprs : expr (',' expr)* ;
expr : KEY '=' VALUE ; // match key=value
KEY : [a-zA-Z]+ ; // match lower-case identifiers
VALUE : NUMBER | LIST ;
LIST : '[' NUMBER (',' NUMBER)* ']';
NUMBER : INTEGER ;
INTEGER : DECIMAL_INTEGER ;
DECIMAL_INTEGER : NON_ZERO_DIGIT DIGIT* | '0'+
;
fragment NON_ZERO_DIGIT : [1-9] ;
/// digit ::= "0"..."9"
fragment DIGIT : [0-9] ;
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
Java program which uses generated classes: 使用生成的类的Java程序:
String s = " s=1,a=2";
KeyValLexer lexer = new KeyValLexer(CharStreams.fromString(s));
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
KeyValParser parser = new KeyValParser(commonTokenStream);
ProgramContext tree = parser.program();
provides error 提供错误
line 1:8 mismatched input '<EOF>' expecting KEY
How can i avoid this error? 如何避免此错误?
LIST
should be a parser rule. LIST
应该是解析器规则。 Something like this should do it: 这样的事情应该做到:
grammar KeyVal;
program
: exprs EOF
;
exprs
: expr ( ',' expr )*
;
expr
: KEY '=' value
;
value
: DECIMAL_INTEGER
| list
;
list
: '[' value ( ',' value )* ']'
;
KEY
: [a-zA-Z]+
;
DECIMAL_INTEGER
: [1-9] [0-9]*
| '0'+
;
WS
: [ \t\r\n]+ -> skip
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.