将语法从Antlr2转换为Antlr4后输入不匹配

时间:2014-03-27 08:28:53

标签: c# antlr4

我有一个现有的语法,我使用C#输出转换为Antlr4。如果输入的消息不匹配,第一个令牌就会失败“开始”#39;期待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 now

Antlr文件是

   start : ANY_WORD+;

   ANY_WORD
: 
~('\r'|'\n'|' '|'\t'|'\u000C')+
;

    WS  : (' '|'\t'|'\u000C') -> skip 
;

1 个答案:

答案 0 :(得分:1)

  1. 这属于issue tracker for the C# target

  2. 我只是尝试重现此问题,配置C#目标as described in the Readme instructions for the latest version of the project,并且第一次尝试时解析工作正常。