Antlr4.3语法中的NoViableAltException
NoViableAltException in Antlr4.3 grammar
问题
刚开始用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
要分析此类问题,请转储令牌流以查看词法分析器实际在做什么。要转储令牌,请参阅此 - 它在 Java 中,但 C# 实现应该非常相似。
问题
刚开始用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
要分析此类问题,请转储令牌流以查看词法分析器实际在做什么。要转储令牌,请参阅此