【发布时间】:2013-02-04 13:49:57
【问题描述】:
这是我正在研究的语法的一部分,用于开发一个解析器工具,这对我的研究很重要。它在 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+']')?)* ;
反斜杠是 Latex 的一部分,现在可以省略,因为它们用作字符串。请在下面找到 Circus 的完整 EBNF。它来自已发表的论文,A Denotational Semantics for Circus。
马戏团的完整 EBNF - http://www.use.com/b1ad2df0609961615fff
【问题讨论】:
-
您知道错误的实际含义吗?您是否正在寻找解决方案?还是你不明白错误的根源在哪里?
-
我知道它对自己的呼唤,而且我必须用一个向左的原子规则来完成它。是的,我现在正在努力寻找解决方案。非常感谢您的有用指导
标签: antlr mutual-recursion left-recursion