Вопрос определения языка - PullRequest
1 голос
/ 14 ноября 2010

Может кто-нибудь помочь мне понять, что именно это означает?

<stmt> := var <ident> = <expr>
    | <ident> = <expr>
    | for <ident> = <expr> to <expr> do <stmt> end
    | read_int <ident>
    | print <expr>
    | <stmt> ; <stmt>

<expr> := <string>
    | <int>
    | <arith_expr>
    | <ident>

<bin_expr> := <expr> <bin_op> <expr>
<bin_op> := + | - | * | /

<ident> := <char> <ident_rest>*
<ident_rest> := <char> | <digit>

<int> := <digit>+
<digit> := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<string> := " <string_elem>* "
<string_elem> := <any char other than ">

В первой части я предполагаю, что <ident> означает "Идентификатор", а <expr> означает "Выражение" и <arith_expr> означает «Арифметическое выражение».Но остальное меня немного смущает.

Спасибо

Ответы [ 3 ]

4 голосов
/ 14 ноября 2010

Возможно, стоит освежить вашу форму Бэкуса Наура - навыки чтения.

2 голосов
/ 14 ноября 2010
<stmt> := var <ident> = <expr>
    | <ident> = <expr>
    | for <ident> = <expr> to <expr> do <stmt> end
    | read_int <ident>
    | print <expr>
    | <stmt> ; <stmt>

Перевод: утверждение может быть либо

  • объявление переменной (с выражением)
  • присваивание переменной (с выражением)
  • цикл for () (с двумя выражениями и оператором)
  • read_int (с идентификатором)
  • печать (с выражением)
  • два оператора, разделенные точкой с запятой

<expr> := <string>
    | <int>
    | <arith_expr>
    | <ident>

Перевод: выражение может быть либо

  • строковый литерал
  • и целое число
  • арифметическое выражение
  • идентификатор

<bin_expr> := <expr> <bin_op> <expr>
<bin_op> := + | - | * | /

Бинарное выражение состоит из двух выражений и двоичного оператора между ними. Бинарные операторы:

+ - * /

<ident> := <char> <ident_rest>*
<ident_rest> := <char> | <digit>

Идентификатор всегда начинается с символа, но остальная часть идентификатора может состоять из символов и цифр


<int> := <digit>+
<digit> := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

определение цифры


<string> := " <string_elem>* "
<string_elem> := <any char other than ">

определение строкового литерала

2 голосов
/ 14 ноября 2010
<stmt>        = Statement
<expr>        = Expression
<bin_expr>    = Binary expression (Expression involving <bin_op>)
<bin_op>      = Binary operator
<ident>       = Identifier
<ident_rest>  = Rest of identifier
<int>         = Integer
<digit>       = Digit
<string>      = String
<string_elem> = String element
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...