问题
我刚开始使用ANTLR(4.3 for .NET),调试了好久,我不得不投降。我在最后 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
最佳答案
要分析此类问题,请转储 token 流以查看词法分析器实际在做什么。要转储 token ,请参阅此 answer - 它是在 Java 中,但 C# 实现应该非常相似。
关于c# - Antlr4.3语法中的NoViableAltException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31407731/