首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚语言的EBNF语法

虚语言的EBNF语法
EN

Stack Overflow用户
提问于 2015-09-07 08:08:50
回答 1查看 194关注 0票数 0

在学校里,我们一直在学习元语言,尤其是铁路图和EBNF。我收到一个问题,一种想象的编程语言(温斯顿)是用EBNF描述的。下面是:

代码语言:javascript
复制
Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
LCase = a | b | c | d
UCase = A | B | C | D | E | F | G | H | I | J
Operator = + | - | * | /
Logical = < | > | <= | >= | <>
Constant = [-] <Digit>{<Digit>}
Identifier = <UCase>{<LCase> | <Digit>}
Assignment = Set <Identifier> to <Constant> | <Identifier
                    {<Operator>(<Constant> | <Identifier>)}
Condition = <Identifier> <Logical> (<Identifier> | <Constant>)
                    {(and | or) <Identifier> <Logical> (<Identifier> | <Constant>)}
When = (<Assignment> |  <Condition> {<Assignment> | <Condition>})
Statement = <Input> | <Output> | <Assignment> | <Condition> | <When> | <Pretest> | <Posttest>
Program = Start <Statement> {! <Statement>} Stop

下面写的程序是与温斯顿一起编写的,但没有正确执行。使用EBNF描述来识别错误.

代码语言:javascript
复制
Start
Input J1
Input J2
When (J1 = J2, Set A3 to 0), (J1 < J2, Set A3 to -1), Set A3 to 1
Output A3
Stop

我目前为止的工作:对我来说,这个计划似乎是合法的。这是一个程序,所以如果必须以“开始”开始,以“停止”结尾,它就这样做了。中间的陈述似乎是允许的。有人能给我指明正确的方向吗?

另外,有人能告诉我,在一个程序的EBNF描述中这意味着什么吗:<statement>

我认为这意味着陈述,如何时和如果,但我不太确定。谢谢你的帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-07 08:50:25

When是逗号分隔的,语法根本没有指定逗号。

J1 = J2 --语法中没有=比较操作(参见Logical),因此J1 = J2既不是Assignment,也不是Condition,因此是无效的。

<statement> --语法将符号包装在右边的尖括号中,例如左边的Identifier,以及后来的Assignment规则中的<Identifier> --这看起来不像一个有效的EBNF

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

https://stackoverflow.com/questions/32433899

复制
相关文章

相似问题

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