c# - Antlr4.3语法中的NoViableAltException

标签 c# .net antlr4

问题

我刚开始使用ANTLR(4.3 for .NET),调试了好久,我不得不投降。我在最后 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

最佳答案

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

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

相关文章:

c# - 验证规则

c# - 从解决方案生成类依赖图的任何工具

.net - 如何识别延迟签名程序集

c# - 用于限制可以为属性设置的值的结构化代码

antlr4 - 具有替代方案的规则集 - 如何避免 reportAttemptingFullContext 和 reportContextSensitivity

VS 代码中的 C# 控制台应用程序未在 Application Insight 中编写

.net - ClickOnce 和自定义更新 URL

java - 没有方法program()来构建解析树对象

java - ANTLR 4.7.1 生成的解析器中存在问题

c# - Python 比 Java/C# 慢吗?