我有以下语法来使用 Antlr3 解析嵌套列表
parse:
list
;
list:
LBRACK list_element* RBRACK
;
list_element:
tree_ | list
;
tree_:
node | ATOM
;
node:
LBRACK tree_ SEPARATOR tree_ RBRACK
;
ATOM: 'nil';
LBRACK: '(';
RBRACK: ')';
SEPARATOR: '.';
WS : (' ' | '\f' | '\r' | '\n' | '\t')+{$channel = HIDDEN;};
我无法找出导致错误的原因或如何消除错误:
'/ListParseTest/src/ListParse.g:17:13: [fatal] 规则 list_element 具有非 LL(*) 决定,因为可以从 alts 1,2 访问递归规则调用。通过左分解或使用句法谓词或使用 backtrack=true 选项来解决。|---> 列表元素:'
我认识到这与list
,list_element
和之间的递归关系有关tree_
,但我无法解决问题。
有人可以帮忙吗?