问题
我刚开始使用ANTLR(.NET版本为4.3),调试了一段时间后,我不得不投降。我在最后4行中得到一个NoViableAltException
-但我真的不知道如何解决它...
所以您对我有什么提示吗?
假设行为
生成的解析器应该解析诸如Hello {User.Name}!
或Hello {{ {User.Name("}")} }}!
之类的字符串,其中User.Name
和User.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/