2016-04-01 9 views
1

初めてレキシングモードを試しています。 私は「メイン」文法にインポートするモードのレクサー文法を持っています。 文法のレクサー用のJavaクラスを生成するときにこのエラーが発生しますレクサーのモードを追加するときのAntlrエラー

'ルールDESCRIPTION_FIELDには、認識できない定数値を持つlexerコマンドが含まれています。私が手に生成GrammarLexer.javaでとても

grammar Grammar; 
import TestLexerGrammar; 


descriptionElement 
: 
    DESCRIPTION_FIELD freeTextFields 
; 

freeTextFields 
: 
    FREE_TEXT_FIELD_FORMAT+ 
; 

lexer grammar TestLexerGrammar; 

DESCRIPTION_FIELD 
: 
    'DESCRIPTION:'-> pushMode(FREETEXTMODE) 
; 


mode FREETEXTMODE; 

FREE_TEXT_FIELD_FORMAT 
: 
    STR+ 
; 

fragment 
STR 
: 
    (
     LETTER 
     | DIGIT 
    ) 
; 

私のメインの文法:レクサー通訳が」

を誤った出力を生成することが、私はこのarticle マイレクサー文法は以下の通りです続きますエラー:「FREETEXTMODEを変数に解決できません」

これは間違ったアプローチですか?解析ルールを使ってモードを変更する方法がありますか?

+0

あなたが提案した文法(レターを追加した後、桁規則は)大丈夫です。それは私のために働いた... – Divisadero

+0

あなたは正しいです、申し訳ありません私は構文解析文法にトークャのDESCRIPTION_FIELDを使用してレクサー文法をインポートしていることを忘れて忘れて (投稿の編集) –

答えて

1

importステートメントで文法でモードを使用することはできません。 githubに関連する問題はProblems with lexical modes inside an imported grammarNo error/incorrect code generation when importing lexer grammar with modes into a combined grammarです。

だから、あなたはあなたのメインの文法を修復し、次のようにして、インポート文を削除する必要があります。

parser grammar Grammar; 
options { tokenVocab=TestLexerGrammar; } 
関連する問題