这是我正在研究的语法的一部分,用于开发一个解析器工具,这对我的研究很重要。它在 ANTLR IDE 下给我一个错误在 eclipse 中说paraction, action, cspaction
是相互左递归的。
我已经在网上扫描了一个解决方案,但不知道我该怎么做。由于这种语言是研究领域的标准,我没有改变语言语义细节的先决条件。
paraction : action | decl '\circspot' paraction;
action : schemaexp | command | INDEX | cspaction | action '['INDEX+ ':=' exp+']';
cspaction : 'Skip'|'Stop'|'Chaos'|comm '\circthen' action | pred '&' action
|action ';' action | action '\extchoice' action | action '\intchoice' action
|action '\lpar' nsexp | csexp | nsexp '\rpar' action
|action '\lpar' nsexp | nsexp '\rpar' action
|action '\\' csexp | paraction '('exp+')' | '\circmu' INDEX '\circspot' action
| ';' decl '\circspot' action | 'extchoice' decl '\circspot' action
| '\intchoice' decl '\circspot' action
| '\lpar' csexp '\rpar' decl '\circspot' '\lpar' nsexp '\rpar' '\circspot' action
| '\interleave' decl '\circspot' '\lpar' nsexp '\rpar' action;
我实际上正在尝试为“Circus”创建一个语法文件,它是一种状态丰富的形式建模语言,它结合了一种称为 Z 的规范语言和一种称为 CSP(通信顺序过程)的过程建模语言,所以是的,这是一个现有语言。由于正在开发中的语言,它现在在学术界使用。我有该语言的 EBNF,我正在尝试将 EBNF 翻译成 ANTLR 中的语法。我已经设法使以下两条规则起作用。但cspaction
似乎很难。
paraction : (decl '\circspot' (paraction)+ | action) ;
action : ((schemaexp | command | N | cspaction)('[' IDENT+ ':=' exp+']')?)* ;
反斜杠是乳胶的一部分,现在可以省略,因为它们用作字符串。请在下面找到 Circus 的完整 EBNF。它来自已发表的论文,马戏团的指称语义。
马戏团的完整 EBNF - http://www.use.com/b1ad2df0609961615fff