我正在做一项家庭作业,其中给我提供了一段题为“MODU-2语法的EBNF描述”的文本片段,问题是:
给出Modula-2中最短REPEAT语句的一个例子。(‘最短’是指最少的词数。)
我很抱歉不能提供文本,它在一个页面上的密码是受保护的,但文本是如标题所示。基本上,这是我想出来的,我想知道这是否有效。
对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;DR是EBNF语句的其余部分,如果我说EXIT的话,它是无效的。
发布于 2015-02-18 17:52:59
嗯,EBNF很清楚:
RepeatStatement = `REPEAT` StatementSequence `UNTIL` Expression.因此,必须有-- REPEAT关键字、语句序列(可以是EXIT)、UNTIL关键字和表达式。只有这四个部分组成一个有效的重复声明..。
所以我想这样的事情会是你能做的最短的事情:
REPEAT EXIT UNTIL TRUE发布于 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语法图,使用您选择的方言:
该脚本包含详细说明如何将EBNF转换为脚本用于图表描述的列表表示法。
希望这能帮上忙
更新:
现在,我专门为PIM Modula-2生成了图表,并将其放在Modula-2 Info Wiki上:
http://modula-2.info/m2pim/pmwiki.php/SyntaxDiagrams/PIM4NonTerminals
注意,如果你在学校使用的是国际标准化组织M2,仍然会有不同的地方。
https://stackoverflow.com/questions/28590058
复制相似问题