EBNF虚构语言的语法

时间:2015-09-07 08:08:50

标签: ebnf

在学校,我们一直在研究元语言,特别是铁路图和EBNF。我收到了一个问题,其中在EBNF中描述了一种虚构的编程语言(winston)。这是:

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

下面写的程序是用winston编写的,但没有正确执行。使用EBNF描述来识别错误。

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

到目前为止我的工作:对我来说,这个程序看似合法。这是一个程序,所以如果必须从&#34;开始&#34;并以&#34; stop&#34;结束。中间的陈述似乎允许在那里。有人能指出我正确的方向吗?

此外,有人可以告诉我在程序的EBNF描述中它意味着什么:<statement>

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

1 个答案:

答案 0 :(得分:1)

When以逗号分隔,语法根本不指定逗号。

J1 = J2 - 语法中没有=比较操作(请参阅Logical),因此J1 = J2既不是Assignment也不是{{1}因而无效。

Condition - 语法包含右侧尖括号中的符号,例如左侧是<statement>,后来是Identifier <Identifier>规则中的Assignment - 看起来不像有效的EBNF