Antlr4.3语法中的NoViableAltException

NoViableAltException in Antlr4.3 grammar

问题

刚开始用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

要分析此类问题,请转储令牌流以查看词法分析器实际在做什么。要转储令牌,请参阅此 - 它在 Java 中,但 C# 实现应该非常相似。