首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最短重复语句莫杜拉-2

最短重复语句莫杜拉-2
EN

Stack Overflow用户
提问于 2015-02-18 17:33:17
回答 2查看 317关注 0票数 2

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

给出Modula-2中最短REPEAT语句的一个例子。(‘最短’是指最少的词数。)

我很抱歉不能提供文本,它在一个页面上的密码是受保护的,但文本是如标题所示。基本上,这是我想出来的,我想知道这是否有效。

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

代码语言:javascript
复制
RepeatStatement = `REPEAT` StatementSequence `UNTIL` Expression.

StatementSequence = Statement {“;” Statement}.

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

因此,通过这种描述,我可以简单地说:

代码语言:javascript
复制
REPEAT EXIT.

然后就结束了?还是我一定要使用UNTIL和/或完整的StatementSequence EBNF描述?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-18 17:52:59

嗯,EBNF很清楚:

代码语言:javascript
复制
RepeatStatement = `REPEAT` StatementSequence `UNTIL` Expression.

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

所以我想这样的事情会是你能做的最短的事情:

代码语言:javascript
复制
REPEAT EXIT UNTIL TRUE
票数 2
EN

Stack Overflow用户

发布于 2015-09-29 14:29:52

既然这是家庭作业,我相信真正的问题是

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

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

这是重复语句的图表:

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

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

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

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

然而,请记住,这是一种新的修正Modula-2方言,这与你将在你的大学使用的方言之间有区别。尽管如此,将图表与其对应的EBNF进行比较将有助于您更好地理解EBNF符号。

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

diagrams.tcl

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

希望这能帮上忙

更新:

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

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

注意,如果你在学校使用的是国际标准化组织M2,仍然会有不同的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28590058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档