Primitive 言語について

csnagoya でやってる
コンパイラ入門に出てくる言語についてまとめとこうと思う.

lambda が無いな.
statement の ident(literal) って何かと思ったら,
たぶん,組込み関数があるんだね.
ユーザー関数書けないから,最初わからなかったよ.

プログラム全体
<program>    --> "MODULE" <ident> ";" [ <declist> ] "BEGIN" <statlist> "END" <ident> "."
識別子
<ident>      --> <letter> ( <letter> | <digit> )*
変数宣言
<declist>    --> "VAR" ( <identlist> ":" <type> ";" )+
<identlist>  --> <ident> ( "," <ident> )*
型
<type>       --> "INTEGER" | "STRING"
文
<statlist>   --> <statement> ( ";" <statement> )*
<statement>  --> <ident> ":=" <expression>
              |  "IF" <relation> "THEN" <stalist> [ "ELSE" <statlist> ] "END"
              |  "WHILE" <relation> "DO" <statlist> "END"
              |  <ident> "(" <literal> ")"
式
<relation>   --> <expression> <rel op> <expression>
<expression> --> [ <unary op> ] <term> ( <add op> [ <unary op> ] <term> )*
<term>       --> <factor> ( <mul op> <factor> )*
<factor>     --> <literal> | "(" <expression> ")"
<integer>    --> <digit>+
演算子
<rel op>     --> "<>" | "<" | "<=" | "=" | ">" | ">="
<unary op>   --> "+" | "-"
<add op>     --> "+" | "-"
<mul op>     --> "*" | "/"
リテラル
<literal>    --> <ident> | <integer> | <string>
<digit>      --> "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<string>     --> " <any character exprect EOF, EOL and "> "
<letter>     --> "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" |
                 "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" |
                 "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" |
                 "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"