[英]How to remove Left recursive in this ANTLR grammar?
我正在尝试解析CSP(Communicating Sequential Processes) CSP参考手册 。 我已经定义了以下语法规则。
assignment
: IDENT '=' processExpression
;
processExpression
: ( STOP
| SKIP
| chaos
| prefix
| prefixWithValue
| seqComposition
| interleaving
| externalChoice
....
seqComposition
: processExpression ';' processExpression
;
interleaving
: processExpression '|||' processExpression
;
externalChoice
: processExpression '[]' processExpression
;
现在ANTLR报道了这一点
seqComposition
interleaving
externalChoice
是递归的。 有没有办法删除这个或我应该更好地使用Bison Flex这种类型的语法。 (有很多这样的规则)
定义processTerm
。 然后写规则看起来像
assignment
: IDENT '=' processExpression
;
processTerm
: ( STOP
| SKIP
| chaos
| prefix
...
processExpression
: ( processTerm
| processTerm ';' processExpression
| processTerm '|||' processExpression
| processTerm '[]' processExpression
....
如果你想要定义像seqComposition
这样的东西,我认为那也没关系。 但是,您需要确保在继续执行规则时解析processExpansion
将始终消耗更多文本。
阅读ANTLR wiki中删除左递归的指南。 这对我帮助很大。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.