【问题标题】:Mismatched input after converting grammar from Antlr2 to Antlr4将语法从 Antlr2 转换为 Antlr4 后输入不匹配
【发布时间】:2014-03-27 19:26:29
【问题描述】:

我有一个现有的语法,我正在使用 C# 输出将其转换为 Antlr4。它在第一个令牌上失败,消息不匹配输入“开始”期望 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 
;

【问题讨论】:

    标签: c# antlr4


    【解决方案1】:
    1. 这属于issue tracker for the C# target

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

    【讨论】:

    • 感谢您告诉我。我会四处寻找,看看我是否可以提供更多关于可能发生的事情的信息,并在适当的情况下将其提交到问题列表。
    猜你喜欢
    • 1970-01-01
    • 2022-10-18
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2016-03-13
    • 2014-02-12
    相关资源
    最近更新 更多