如何解决这个简单的反递归问题

问题描述 投票:1回答:1

我正在读取URL(并尝试复制),但失败了...(也有关于antlr的出色文章)。

https://supportweb.cs.bham.ac.uk/docs/tutorials/docsystem/build/tutorials/antlr/antlr.html

添加括号内容之前的解决方案:

whereClause: WHERE expression -> ^(WHERE_CLAUSE expression);
expression: orExpr;
orExpr: andExpr (OR^ andExpr)*;
andExpr: primaryExpr (AND^ primaryExpr)*;
primaryExpr: parameterExpr | inExpr | compExpr;

我的解决方案由于无限递归而失败(但是我认为应该将LPAREN ^和RPAREN!用来解决这个问题?……。]]

whereClause: WHERE^ (expression | orExpr);
expression: LPAREN^ orExpr RPAREN!;
orExpr: andExpr (OR^ andExpr)*;
andExpr: primaryExpr (AND^ primaryExpr)*;
primaryExpr: parameterExpr | inExpr | compExpr | expression;

请注意,底部的primaryExpr的表达式带有LPAREN和RPAREN,但WHERE可以是orExpr或表达式(即第一个表达式可以使用或不使用括号)。

我确信这可能是一个简单的问题,例如我经常盯着打字错误的错字。

我正在读取URL(并尝试复制),但失败了...(也有关于antlr的出色文章)。 https://supportweb.cs.bham.ac.uk/docs/tutorials/docsystem/build/tutorials/antlr/antlr.html我之前的解决方案...

antlr antlr3
1个回答
1
投票

我正在阅读url(并试图复制),但失败了...(也有关于antlr的出色文章...

© www.soinside.com 2019 - 2024. All rights reserved.