最短的REPEAT声明Modula-2

时间:2015-02-18 17:33:18

标签: syntax ebnf modula-2

我正在完成一项家庭作业,其中提供了一段标题为“模块化语法的EBNF描述”的文本片段,问题是:

“举一个Modula-2中最短REPEAT语句的例子。('Shortest'表示词汇数量最少。)”

我为无法提供文本而道歉,它是在受密码保护的页面上,但文本正如标题所示。基本上这就是我提出的,我想知道这是否有效。

REPEAT及其后续陈述的EBNF描述如下:

RepeatStatement = `REPEAT` StatementSequence `UNTIL` Expression.

StatementSequence = Statement {“;” Statement}.

Statement = [Assignment | ProcedureCall | IfStatement | CaseStatement | 
             WhileStatement | RepeatStatement | LoopStatement | 
             ForStatement | WithStatement | `EXIT`

因此,我可以简单地说:

REPEAT EXIT.

并且完成了吗?或者我是否必须使用UNTIL和/或完整的StatementSequence EBNF描述?

TL;如果我只说EXIT,则DR是EBNF声明的其余部分无效吗?

2 个答案:

答案 0 :(得分:2)

嗯,EBNF很清楚:

RepeatStatement = `REPEAT` StatementSequence `UNTIL` Expression.

因此必须一个REPEAT关键字,一个语句序列(可以只是EXIT),UNTIL关键字和一个表达式。只有这四个部分组成了一个有效的重复声明......

所以我猜这样的事情可能是最短的:

REPEAT EXIT UNTIL TRUE

答案 1 :(得分:0)

由于这是作业,我相信这里真正的问题是

“我如何找出Modula-2的EBNF?”

我建议通过绘制铁路图来可视化语法规则,然后将其与EBNF进行比较。这将逐渐让您了解EBNF所表达的内容。

这是REPEAT语句的图表:

http://modula-2.net/m2r10/pmwiki.php?n=SyntaxDiagrams.NonTerminals#repeatStatement

Wirth的一些PIM(Modula-2编程)版本确实在本书的附件中有铁路图。如果你没有,那么你可能想在线查找语法图。

我们的项目wiki具有并排(交叉链接)的Modula-2 R10的EBNF和语法图

http://modula-2.net/m2r10/pmwiki.php?n=Spec.Modula-2Syntax

但是,请记住,这是一种新修订的Modula-2方言,在您和您所在大学使用的方言之间存在差异。然而,将图表与其相应的EBNF进行比较将有助于您更好地理解EBNF符号。

最后但并非最不重要的是,您可以使用下面的脚本使用您选择的方言绘制您自己的Modula-2语法图:

https://bitbucket.org/trijezdci/m2r10/src/tip/_GRAMMAR/modula2_syntax_diagrams.tcl

该脚本包含有关如何将EBNF转换为脚本用于图表描述的列表表示法的详细说明。

希望这会有所帮助

更新:

我现在专门针对PIM Modula-2生成了图表,并将其放在Modula-2 Info Wiki上:

http://modula-2.info/m2pim/pmwiki.php/SyntaxDiagrams/PIM4NonTerminals

注意,如果您在学校使用ISO M2,仍然会有差异。