В школе мы изучали метаязыки, в частности железнодорожные диаграммы и EBNF. Я получил вопрос, где в EBNF был описан мнимый язык программирования (winston). Вот оно:EBNF Синтаксис для воображаемого языка
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.
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>
Я думаю, что это означает, что заявления, как, когда и если Im но не слишком уверен. Спасибо за помощь :)
спасибо, и мог бы рассказать мне, что означает '! 'в описании EBNF (смотрите' program') –
'!' В ' {! } 'выглядит как разделитель операторов. –
rns