我有一个现有的语法,我正在使用C#输出将其转换为Antlr4。它在第一个令牌上失败,消息不匹配,输入'Begin‘应为ANY_WORD。奇怪的是,当我打印出令牌来查看它被识别为什么令牌时,它表明它已经正确地识别了它。
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中检查相同的语法和输入也会像预期的那样工作--它会找到第一个没有错误的标记。
来自TestParser.tokens ANY_WORD=28。
输入文件是
Begin parsing nowAntlr文件是
start : ANY_WORD+;
ANY_WORD
:
~('\r'|'\n'|' '|'\t'|'\u000C')+
;
WS : (' '|'\t'|'\u000C') -> skip
;发布于 2014-03-27 19:26:30
issue tracker for the C# target.
https://stackoverflow.com/questions/22681998
复制相似问题