我正在尝试创建一个目前仅限使用的简单整数算术表达式解析器。目前我有:
grammar MyExpr;
input: (expr NEWLINE)+;
expr: '(' expr ')'
| '-' expr
| <assoc = right> expr '^' expr
| expr ('*' | '/') expr
| expr ('+' | '-') expr
| ID '(' ExpressionList? ')'
| INT;
ExpressionList : expr (',' expr)*;
ID : [a-zA-Z]+;
INT : DIGIT+;
DIGIT: [0-9];
NEWLINE : '\r'?'\n';
WS : [\t]+ -> skip;
规则ExpressionList似乎会导致一些问题。如果我删除所有包含ExpressionList的内容,一切都会编译并且似乎运行良好。但像上面一样,我收到了以下错误:
error(160): MyExpr.g4:14:17: reference to parser rule expr in lexer rule ExpressionList
error(126): MyExpr.g4:7:6: cannot create implicit token for string literal in non-combined grammar: '-'
我正在使用Eclipse和Antlr4插件。我试图根据antlr4书中给出的cymbol语法来确定自己的方向。
有人能告诉我我的小语法出了什么问题吗?
自己找出来的:
以大写字母开头的规则指Lexer规则。所以我所要做的就是将我的ExpressionList重命名为ExpressionList。
也许有一天其他人会发现这很有用;)
如果我对“令牌”不感兴趣,因为规则已经建立了我要匹配的对象,而且我无论如何都要跳过它,那么用和令牌声明替换它有意义吗?(然后,代币的数量将会增加。)为什么在ANTLRWorks中这是一个警告?
如何实现这些模式?
提示:它应该看起来像隐式的[固体](... 太感谢你了!
我正在用C写这个链表程序 我测试程序时发现了错误 linkedlist。cpp:5:24:错误:隐式声明的“constexpr LinkedList::LinkedList()”LinkedList::LinkedList()的定义{ 这是密码 Linkedlist. h文件: linkedlist。cpp文件: 请帮忙。
我是ANTLR的新手,我试图使用ANTLR4和C#为计算器应用程序生成一个相对简单的解析器。这是我的语法文件。 我编写了一个自定义词法分析器来生成令牌,以便在解析之前支持变量的隐式乘法和转换为其数字等效值。 但是输入后,我得到以下结果。 请注意,我尝试关闭错误恢复功能并将其设置为报告所有歧义错误,但似乎没有收到任何错误。 无论如何,如果我通过删除除法/乘法运算符之后的?将语法更改为以下内容,那么它