可以使用ANTLR生成CSP(通信顺序进程)解析器吗?

时间:2011-03-19 02:16:53

标签: parsing programming-languages antlr grammar antlr3

我可以在ANTLR中编写用于通信顺序进程(CSP)的解析器吗?我认为它使用左声道递归,如声明

VMS = (coin → (choc → VMS))

可以在CSPM : A Reference Manua找到完整的语言规范 所以它不是LL语法。我是对的吗?

3 个答案:

答案 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/作为示例。