2015-09-07 1 views
0

В школе мы изучали метаязыки, в частности железнодорожные диаграммы и 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 но не слишком уверен. Спасибо за помощь :)

ответ

1

When разделен запятой, и в грамматике не указаны запятые.

J1 = J2 - нет = сравнение оп в грамматике (см Logical), так J1 = J2 ни Assignment, ни Condition и, таким образом, недействительны.

<statement> - символы грамматики обертываются в угловых скобках с правой стороны, например. Identifier с левой стороны, а затем <Identifier> в Assignment правило - это не похоже на действительный EBNF.

+0

спасибо, и мог бы рассказать мне, что означает '! 'в описании EBNF (смотрите' program') –

+0

'!' В ' {! } 'выглядит как разделитель операторов. – rns

 Смежные вопросы

  • Нет связанных вопросов^_^