Antlr4.3语法中的NoViableAltException

时间:2015-07-14 13:15:20

标签: c# .net antlr4

问题

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

1 个答案:

答案 0 :(得分:1)

要分析此类问题,请转储令牌流以查看词法分析器实际执行的操作。要转储令牌,请参阅此answer - 它是Java,但C#实现应该非常相似。