0
我使用C#輸出將現有語法轉換爲Antlr4。它在第一個標記上失敗,消息不匹配輸入'開始'期待ANY_WORD。奇怪的是,當我打印出令牌來查看它被識別的令牌時,它表明它已正確識別它。將語法從Antlr2轉換爲Antlr4後輸入不匹配
string text = File.ReadAllText(fi.FullName);
var fs = new Antlr4.Runtime.AntlrInputStream(text);
var lexer = new TestLexer(fs);
var tokens = new Antlr4.Runtime.CommonTokenStream(lexer);
tokens.Fill();
var tokenList = tokens.GetTokens();
yRLogger.Info("Printing tokens");
foreach(IToken tok in tokenList)
{
Logger.Info(tok.ToString()); //prints [@0,13:17='Begin',<28>,1:13] 28 In TestLexer.tokens, 28 corresponds to ANY_WORD
}
var parser = new TestParser(tokens);
parser.start(); //throws 'mismatched input 'Begin' expecting ANY_WORD. '
在AntlrWorks中檢查相同語法和輸入的行爲與預期相同 - 它會發現第一個令牌沒有錯誤。
From TestParser.tokens ANY_WORD=28
。
輸入文件是
Begin parsing now
的文件的Antlr是
start : ANY_WORD+;
ANY_WORD
:
~('\r'|'\n'|' '|'\t'|'\u000C')+
;
WS : (' '|'\t'|'\u000C') -> skip
;
謝謝你讓我知道。我會仔細研究是否可以提供有關可能發生的情況的更多信息,並在適當的情況下將其提交給問題列表。 –