我可以在ANTLR中编写用于通信顺序进程(CSP)的解析器吗?我认为它使用左声道递归,如声明
VMS = (coin → (choc → VMS))
可以在CSPM : A Reference Manua找到完整的语言规范 所以它不是LL语法。我是对的吗?
答案 0 :(得分:2)
通常,即使你有一个带左递归的语法,你也可以重构语法来删除它。所以ANTLR很可能能够处理你的语法。没有先验的理由你不能为ANTLR编写CSP语法。
你所拥有的是否合适是另一个问题。
如果引用的短语是语法规则,则它没有左递归。 (如果是的话,我不理解你的语法规则的语法,特别是为什么括号[终端?]会不平衡;这是非常不合理的。) 所以ANTLR应该能够处理它,模数转换为ANTRL语法规则语法。
你没有显示其余的语法,所以对其余的语法没有意见。
答案 1 :(得分:1)
在上面的情况下没有左递归。它看起来像。注意这是一个简化版本,CSP要复杂得多。我只是表明它是可能的。
assignment : PROCNAME EQ process
;
process : LPAREN EVENT ARROW process RPAREN
| PROCNAME
;
此外,您可以使用ANTLRWorks“删除左递归”函数来分解左递归。
答案 2 :(得分:1)
在ANTLR中肯定可以使用CSP,请查看http://www.carnap.info/作为示例。