2011-10-10 9 views
1

次のEBNF文法(PL/0のwikipediaにあります)を前提とすると、「ODD」キーワードの前にある式は何ですか?私は小さなプロジェクトとして単純な言語を実装したいと思いますが、これが何を意味するのか分かりません。私は言語のコンパイラを正しく書くことができるように、奇妙な表現が何であるかを理解する前に、誰かがこれを理解していますか?PL/0の「奇数」式

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

答えて

1

EBNF文法を引用はODDが終端記号のシーケンスであることをマーク介し示します。これはWikipediaのページの文法に従った例で確認できます。意味的には、数値のパリティをテストする述語であるようです。

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; 
0

私はodd値が奇数である場合、それは奇数又は偶数(整数)の値を評価し、リターン「真」次式の値か否かを判定する機能と類似していると考えています。 Cで:

bool odd(int exp) { return (exp & 1) != 0; }