Antlr4.3语法中的NoViableAltException
本文关键字:NoViableAltException 语法 Antlr4 | 更新日期: 2023-09-27 18:02:41
问题
我刚开始使用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
要分析这类问题,请转储令牌流以查看lexer实际在做什么。要转储令牌,请参阅这个答案——它是在Java中,但C#实现应该非常相似。