可以使用ANTLR生成CSP(通信顺序进程)解析器吗?
问题描述:
我可以编写一个用于在ANTLR中传递顺序过程(CSP)的解析器吗?我觉得它使用左递归就像在声明中可以使用ANTLR生成CSP(通信顺序进程)解析器吗?
VMS = (coin → (choc → VMS))
完整的语言规范,可以在CSPM : A Reference Manua 找到,所以它不是一个LL语法。我对吗?
答
一般来说,即使您有一个带有左递归的语法,您也可以重构语法以将其删除。所以ANTLR相当有可能能够处理你的语法。没有先验理由,您不能为ANTLR编写CSP语法。
你有没有合适的是另一个问题。
如果您引用的短语是语法规则,则它没有左递归。 (如果是这样,我不明白你的语法规则的语法,特别是为什么括号[终端?]会不平衡;这是非单向的。) 因此,ANTLR应该能够处理它,模转换为ANTRL语法规则语法。
你没有显示其余的语法,所以你不能对它的其余部分有意见。
答
在上面的情况下没有左递归。它看起来像。注意这是一个简化的版本,CSP要复杂得多。我只是表明它是可能的。
assignment : PROCNAME EQ process
;
process : LPAREN EVENT ARROW process RPAREN
| PROCNAME
;
此外,你可以用ANTLRWorks'去除左递归'函数来分解左递归。
+2
虽然_'Remove Left Recursion'_功能只适用于最琐碎的情况:我从来没有见过它正常工作。最好只是自己动手。 – 2011-03-19 08:11:15
谢谢你的回答。我已经编辑了问题到广告链接到语言参考,我解析的语言。 – 2011-03-19 02:50:12
如果您了解左递归,您应该很容易自己检查语法。 – 2011-03-19 02:54:43
...如果您阅读了语言参考手册,作者甚至会说您可以在C++中获得一个免费的,实现的解析器来构建AST。我会从那里开始;如果没有别的,它会有一个完整的,经过测试的语法。 – 2011-03-19 11:10:02