我正在尝试解析CSP(Communicating Sequential Processes)CSP Reference Manual。我已经定义了以下语法规则。
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这种类型的语法。 (有很多这样的规则)
答案 0 :(得分:3)
定义processTerm
。然后编写类似
assignment
: IDENT '=' processExpression
;
processTerm
: ( STOP
| SKIP
| chaos
| prefix
...
processExpression
: ( processTerm
| processTerm ';' processExpression
| processTerm '|||' processExpression
| processTerm '[]' processExpression
....
如果您想要定义seqComposition
之类的内容,我认为也可以。但是,当您继续执行规则时,您需要确保processExpansion
的解析始终会消耗更多文本。
答案 1 :(得分:1)
阅读removing left recursion in on the ANTLR wiki指南。它对我帮助很大。