gpt4 book ai didi

Java ANTLR4 不匹配输入 '' 需要 KEY

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:29 25 4
gpt4 key购买 nike

我正在尝试定义一个简单的语法来解析类似的表达式

s=1,b=2

s=1,b=[1,2,3]

语法是(不完整):

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 程序:

    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();

提供错误

line 1:8 mismatched input '<EOF>' expecting KEY

如何避免这个错误?

最佳答案

LIST 应该是解析器规则。像这样的事情应该可以做到:

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
;

关于Java ANTLR4 不匹配输入 '<EOF>' 需要 KEY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52149540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com