Antlr4.3语法中的NoViableAltException

本文关键字:NoViableAltException 语法 Antlr4 | 更新日期: 2023-09-27 18:02:41

问题

我刚开始使用ANTLR(4.3 for.NET(,在调试了很长一段时间后,我不得不放弃。我在最后4行中得到了一个NoViableAltException,但我真的不知道如何修复它。。。

你有什么线索吗?

假定行为

生成的解析器应该解析像Hello {User.Name}!Hello {{ {User.Name("}")} }}!这样的字符串,其中User.NameUser.Name("}")被期望从expression规则导出,而其他一切都来自plainString。然而,我还没能测试它。。。

语法

grammar PatternString;
@namespace{PatternStringParser.AntlrGenerated}
patternString:            (plainString | expressionString)+;
plainString:              (PLAINSTRINGLITERAL | '""' | '{{' | '}}' )+;
expressionString:        '{' expression* '}';
expression:               BALANCEDSTRINGLITERAL+
                          | '(' expression ')'
                          | '[' expression ']'
                          | '{' expression '}'
                          | '"' string '"'
                          | '''' character '''';
string:                   (STRINGLITERAL | '''"')+;
character:                (CHARACTERLITERAL | '''' )+;
PLAINSTRINGLITERAL:      ~['"'{'}];      // <= NoViableAltException
BALANCEDSTRINGLITERAL:   ~['"'{'('[''];  // <= NoViableAltException
CHARACTERLITERAL:        ~[''];          // <= NoViableAltException
STRINGLITERAL:           ~['"];          // <= NoViableAltException

Antlr4.3语法中的NoViableAltException

要分析这类问题,请转储令牌流以查看lexer实际在做什么。要转储令牌,请参阅这个答案——它是在Java中,但C#实现应该非常相似。

相关文章:
  • 没有找到相关文章