2011-03-19 45 views

回答

2

一般来说,即使您有一个带有左递归的语法,您也可以重构语法以将其删除。所以ANTLR相当有可能能够处理你的语法。没有先验理由,您不能为ANTLR编写CSP语法。

你有没有合适的是另一个问题。

如果您引用的短语是语法规则,则它没有左递归。 (如果是这样,我不明白你的语法规则的语法,特别是为什么括号[终端?]会不平衡;这是非单向的。) 因此,ANTLR应该能够处理它,模转换为ANTRL语法规则语法。

你没有显示其余的语法,所以你不能对它的其余部分有意见。

+0

谢谢你的回答。我已经编辑了问题到广告链接到语言参考,我解析的语言。 – 2011-03-19 02:50:12

+0

如果您了解左递归,您应该很容易自己检查语法。 – 2011-03-19 02:54:43

+1

...如果您阅读了语言参考手册,作者甚至会说您可以在C++中获得一个免费的,实现的解析器来构建AST。我会从那里开始;如果没有别的,它会有一个完整的,经过测试的语法。 – 2011-03-19 11:10:02

1

在上面的情况下没有左递归。它看起来像。注意这是一个简化的版本,CSP要复杂得多。我只是表明它是可能的。

assignment : PROCNAME EQ process 
      ; 
process : LPAREN EVENT ARROW process RPAREN 
     | PROCNAME 
     ; 

此外,你可以用ANTLRWorks'去除左递归'函数来分解左递归。

+2

虽然_'Remove Left Recursion'_功能只适用于最琐碎的情况:我从来没有见过它正常工作。最好只是自己动手。 – 2011-03-19 08:11:15

1

CSP在ANTLR中绝对有可能,例如检查http://www.carnap.info/

+0

该链接可能无效 - 它不再有帮助 – V15I0N 2018-01-09 19:48:19

相关问题