我正在學習如何使用「more」詞法分析器命令。我在ANTLR書所示的詞法語法,281頁輸入:ANTLR4:在詞法分析器命令中無法識別常量值
lexer grammar Lexer_To_Test_More_Command ;
LQUOTE : '"' -> more, mode(STR) ;
WS : [ \t\r\n]+ -> skip ;
mode STR ;
STRING : '"' -> mode(DEFAULT_MODE) ;
TEXT : . -> more ;
然後,我創建了這個簡單的解析器使用詞法分析器:
grammar Parser_To_Test_More_Command ;
import Lexer_To_Test_More_Command ;
test: STRING EOF ;
然後我打開一個DOS窗口,輸入此命令:
antlr4 Parser_To_Test_More_Command.g4
生成此警告消息:
warning(155): Parser_To_Test_More_Command.g4:3:29: rule LQUOTE contains a lexer command with an unrecognized constant value; lexer interpreters may produce incorrect output
我在詞法分析器或解析器中做錯了什麼?
好的,我提出了你建議Sam的修改。我仍然得到這個錯誤:Parser_To_Test_More_CommandLexer.java:63:錯誤:找不到符號 case 0:_mode = STR;打破; 符號:變量STR – 2015-02-07 22:08:27
@RogerCostello文件** Parser_To_Test_More_CommandLexer.java **是從組合語法中剩下的。新的源文件名稱略有不同(具體而言,它們不包括** Lexer **或** Parser **後綴)。您需要清理並重建您的項目。 – 2015-02-09 00:53:48
再次感謝山姆。我清理和重建。這解決了符號問題,但導致了一個不同的問題。我在DOS提示符下運行了這個命令:grun Parser_To_Test_More_Command test -gui並且產生了這個錯誤:線程「main」中的異常java.lang.ClassCastException:class Parser_To_Test_More_Command at java.lang.Class.asSubclass(Unknown Source) at org .antlr.v4.runtime.misc.TestRig.process(TestRig.java:159) at org.antlr.v4.runtime.misc.TestRig.main(TestRig.java:143)問題:grun只能用於組合語法? – 2015-02-09 13:31:56