1
我是Antlr的新手。我定義爲使用ANTLR的3Antlr Left Factoring語法
下面我公司語法我的語法:
grammar Grammar;
@header {
package com.grammar;
}
true : 'true';
false : 'false';
null : 'null';
value : true | false | null | STRING | NUMBER;
query : (STATEMENT+) | STATEMENT?;
INSERT : 'INSERT INTO' TABLE 'VALUES' '('ELEMENTS')'';';
STATEMENT : INSERT;
STRING : ('a'..'z'|'A'..'Z')+;
INTEGER : '0'..'9'+;
ELEMENTS : value | value ',' ELEMENTS;
當我嘗試使用ANTLRWorks生成代碼,我得到以下異常:
error (211): Grammar.g.1:8: [fatal] rule Tokens has non-LL(*) decision due to recursive rule invocations reacable from alts 18,24. Resolve by left-factoring or using syntactic predicates or using backtrack=true option
我看看下面的網站:
http://www.antlr.org/wiki/display/ANTLR3/How+to+remove+global+backtracking+from+your+grammar
有什麼建議可以做什麼?我無法在網上找到很多。
當我添加以下內容:
grammar Grammar;
@options {
backtrack=true;
}
我得到的只有一個例外:
error(100): Grammar.g:3:2: syntax error: antlr: NoViableAltException([email protected][])
[12:03:20] error(100): Grammar.g:3:2: syntax error: antlr: MissingTokenException (inserted [@-1,0:0='<missing ACTION>',<50>,3:1] at options {)
[12:03:20] error(100): Grammar.g:3:2: syntax error: antlr: org.antlr.runtime.EarlyExitException
[12:03:20] error(150): grammar file Grammar.g has no rules
[12:03:20] error(100): Grammar.g:0:1: syntax error: assign.types: MismatchedTreeNodeException(0!=3)
編輯:
我已增值和元素。在ANTLRWorks的圖表中使用ELEMENTS時,無法看到該值。我只能看到:代替
',' ELEMENTS
:
value | value ',' ELEMENTS
難道這是爲令牌異常問題的原因是什麼?這實際上是允許的嗎?解決辦法是什麼?
試過這個,但仍然收到致命令牌異常。 – user1646481
請參閱上面的修改 – user1646481