2

我正在做一项家庭作业,其中向我提供了一个标题为“EBNF 描述 Modula-2 语法”的文本片段,问题是:

“举一个REPEATModula-2 中最短语句的例子。('Shortest' 意味着最少的词位数。)”

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

EBNF 描述REPEAT及其以下语句如下:

RepeatStatement = `REPEAT` StatementSequence `UNTIL` Expression.

StatementSequence = Statement {“;” Statement}.

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

所以通过这个描述,我可以简单地说:

REPEAT EXIT.

完成了吗?还是我绝对必须使用UNTIL和/或完整的StatementSequenceEBNF 描述?

TL;DR 如果我只是说,EBNF 语句的其余部分是否无效EXIT

4

2 回答 2

2

嗯,EBNF 很清楚:

RepeatStatement = `REPEAT` StatementSequence `UNTIL` Expression.

所以你必须有一个REPEAT关键字、一个语句序列(可以只是EXIT)、UNTIL关键字和一个表达式。只有这四个部分共同构成一个有效的重复语句......

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

REPEAT EXIT UNTIL TRUE
于 2015-02-18T17:52:59.387 回答
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,仍然会有差异。

于 2015-09-29T14:29:52.917 回答