Syntax 最短重复语句模A-2

Syntax 最短重复语句模A-2,syntax,ebnf,modula-2,Syntax,Ebnf,Modula 2,我正在做一项家庭作业,作业中提供了一段题为“模块-2语法的EBNF描述”的文本,问题是: “举例说明模A-2中最短的REPEAT语句。(“最短”表示词素数最少。) 我很抱歉不能提供文本,它位于一个有密码保护的页面上,但是文本如标题所示。基本上这就是我想到的,我想知道这是否有效 REPEAT的EBNF描述及其以下声明如下: RepeatStatement = `REPEAT` StatementSequence `UNTIL` Expression. StatementSequence = St

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

“举例说明模A-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.
怎么办?或者我必须使用
直到
和/或完整的
语句序列
EBNF描述吗


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

那么,EBNF非常清楚:

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

所以我想像这样的东西是你能做到的最短的:

REPEAT EXIT UNTIL TRUE

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

“如何计算模块A-2的EBNF?”

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

这是REPEAT语句的示意图:

沃思的一些PIM(Modula-2编程)版本在本书的附录中确实有铁路图。如果您的没有,那么您可能希望在线查找语法图

我们的项目wiki在

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

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

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

希望这有帮助

更新:

我现在专门为PIM Modula-2生成了图表,并将其发布在Modula-2信息维基上,网址为:


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

但是根据使用EBNF编写代码的绝对描述,我不是必须使用完整的
StatementSequence=Statement{;“Statement}.
等等?@RyanTibbetts:这意味着一个
语句序列是一个单独的语句-可以选择后跟分号和另一个语句。因此,用一条语句代替
StatementSequence
是绝对有效的……好酷!谢谢你的帮助,marc,我在这项任务上还有很多事情要做,所以继续理解这一点将非常有帮助。向上投票+