gpt4 book ai didi

java - 由于递归规则调用,ANTLR3 错误规则具有非 LL(*) 决策

转载 作者:行者123 更新时间:2023-12-02 05:42:11 28 4
gpt4 key购买 nike

我正在尝试使用 antlr 3 为我的语法生成词法分析器和解析器。有人可以解释这个错误是什么意思吗?

error(211): T.g:14:6: [fatal] rule stmt has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2.  Resolve by left-factoring or using syntactic predicates or using backtrack=true option.

这是我的语法


grammar T;

prog :
(stmt)+
;

stmt :
assigning
| concatenation
| addorremove
| slicing
;

assigning : ID '=' value
| ID '[' INT ']' '=' value
;
addorremove : ID '.' 'append' '(' value ')'
| ID '.' 'insert' '(' INT ',' value ')'
| ID '.' 'remove' '(' value ')'
;
concatenation :
ID '=' val1=value '+' val2=value
;

slicing : id1=ID '=' id2=ID '[' int1=INT ':' int2=INT ']'
| id1=ID '=' id2=ID '[' int1=INT ':' ']'
| id1=ID '=' id2=ID '[' ':' int2=INT ']'
;

list :
'[' (val1=value (',' val2=value )*)? ']'
| '[' expr 'for' 'x' 'in' id2=ID 'if' op1=operand COMP op2=operand ']'
;

operand :
INT
| 'len' '(' 'x' ')'
| 'abs' '(' 'x' ')'
;
expr :
'x'
| 'len' '(' 'x' ')'
| 'abs' '(' 'x' ')'
| 'max' '(' 'x' ')'
;

value :
INT
| list
| STRING
| ID
;

//lexer rules
STRING : '\'' (~'\'')* '\'';
INT : ('-')? ('0'..'9')+;
ID : ('a'..'z'|'A'..'Z'|'\_') ('a'..'z'|'A'..'Z'|'0'..'9'|'\_')*;
COMP : ('==' | '!=' | '<' | '<=' | '>' | '>=');

// consume whitespace
WS : (' '|'\t'|'\n'|'\r')+ {skip();} ;

// consume comments
COMMENTS : ('//')~('\n'|'\r')* {skip();} ;

此语法旨在重新创建用于列表操作的 Python 简化版本,其中包括赋值、串联、添加和删除元素以及列表切片。

还有一个解析部分来解析以下形式的列表表达式:[列表中 x 的 if 条件表达式]

最佳答案

使用antlr 4 jar运行语法解决了这个问题。

关于java - 由于递归规则调用,ANTLR3 错误规则具有非 LL(*) 决策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126734/

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