语言定义问题

时间:2010-11-14 10:05:25

标签: programming-languages language-design

有人可以帮我理解这意味着什么吗?

<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 个答案:

答案 0 :(得分:4)

也许应该提高你的Backus Naur Form - 阅读技巧。

答案 1 :(得分:2)

<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

答案 2 :(得分:2)

<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 ">

字符串文字的定义