简体   繁体   English

Java ANTLR4输入不匹配&#39; <EOF> 期待KEY

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM