问题

我刚开始使用ANTLR(.NET版本为4.3),调试了一段时间后,我不得不投降。我在最后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

最佳答案

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

关于c# - Antlr4.3语法中的NoViableAltException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31407731/

10-12 02:54
查看更多