1

次のEBNF文法(PL / 0のウィキペディアにあります)を考えると、「ODD」キーワードの前にある式は何ですか?簡単な言語を小さなプロジェクトとして実装したいのですが、これが何を意味するのか理解できないようです。私がその言語のコンパイラを正しく書くことができるように、誰かが以前にこれの頭を持っているか、奇妙な表現が何であるかを解釈することができますか?

program = block "." .

block = [ "const" ident "=" number {"," ident "=" number} ";"]
        [ "var" ident {"," ident} ";"]
        { "procedure" ident ";" block ";" } statement .

statement = [ ident ":=" expression | "call" ident |
            "begin" statement {";" statement } "end" |
            "if" condition "then" statement |
            "while" condition "do" statement ].

condition = "odd" expression |
            expression ("="|"#"|"<"|"<="|">"|">=") expression .

expression = [ "+"|"-"] term { ("+"|"-") term}.

term = factor {("*"|"/") factor}.

factor = ident | number | "(" expression ")".
4

2 に答える 2

1

EBNF文法は、終端記号のシーケンスである引用符で示します。ODDこれは、ウィキペディアページの文法に続く例によって確認されます。意味的には、数値のパリティをテストする述語のように見えます。

BEGIN
  a := x;
  b := y;
  z := 0;
  WHILE b > 0 DO BEGIN
    IF ODD b THEN z := z + a;
    a := 2 * a;
    b := b / 2
  END
END;
于 2011-10-10T08:48:48.307 に答える
0

oddそれに続く式の値が奇数または偶数(整数)の値に評価されるかどうかを決定し、値が奇数の場合は「true」を返す関数に類似していると思います。Cの場合:

bool odd(int exp) { return (exp & 1) != 0; }
于 2011-10-10T04:31:29.503 に答える