簡體   English   中英

Antlr左因子語法

[英]Antlr Left-Factoring Grammar

我是Antlr的新手。 我正在使用Antlr 3為我的公司定義語法。

以下是我的語法:

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(55@[])
   [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

這可能是令牌異常問題的原因嗎? 這實際上是允許的嗎? 解決辦法是什么?

嘗試

query           : (STATEMENT)*;

一些建議:

  • 避免規則

     value | value ',' ELEMENTS 

兩種選擇都以相同的術語開頭。 將該術語移到方括號中:

   value (','  value ) * 
  • 必須定義所有術語(語法中未定義NUMBER)

  • 只有一個規則可以定義未從其他規則引用的術語

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM