虚构语言的 EBNF 语法
EBNF Syntax for imaginary language
在学校我们一直在学习元语言,尤其是铁路图和 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
我目前的工作:对我来说,这个程序似乎是合法的。这是一个程序,因此如果必须以 "start" 开头并以 "stop" 结尾,它就是这样做的。中间的陈述似乎被允许在那里。有人能指出我正确的方向吗?
另外,谁能告诉我程序的 EBNF 描述中的意思是什么意思:<statement>
我认为这意味着诸如 when 和 if 之类的陈述,但我不太确定。感谢您的帮助:)
When
是逗号分隔的,语法根本没有指定逗号。
J1 = J2
-- 语法中没有 =
比较操作(参见 Logical
),因此 J1 = J2
既不是 Assignment
,也不是 Condition
因此无效。
<statement>
-- 语法将符号包装在右侧的尖括号中,例如左边的 Identifier
和后来的 Assignment
规则中的 <Identifier>
-- 这看起来不像是有效的 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
我目前的工作:对我来说,这个程序似乎是合法的。这是一个程序,因此如果必须以 "start" 开头并以 "stop" 结尾,它就是这样做的。中间的陈述似乎被允许在那里。有人能指出我正确的方向吗?
另外,谁能告诉我程序的 EBNF 描述中的意思是什么意思:<statement>
我认为这意味着诸如 when 和 if 之类的陈述,但我不太确定。感谢您的帮助:)
When
是逗号分隔的,语法根本没有指定逗号。
J1 = J2
-- 语法中没有 =
比较操作(参见 Logical
),因此 J1 = J2
既不是 Assignment
,也不是 Condition
因此无效。
<statement>
-- 语法将符号包装在右侧的尖括号中,例如左边的 Identifier
和后来的 Assignment
规则中的 <Identifier>
-- 这看起来不像是有效的 EBNF.