2011-10-10 2 views
1

다음 EBNF 문법 (PL/0에 대한 위키 백과에서 찾을 수 있음)이 주어지면 "ODD"키워드가 앞에 오는 표현식은 무엇입니까? 작은 프로젝트로 간단한 언어를 구현하고 싶습니다만, 이것이 의미하는 바를 이해하지 못하는 것 같습니다. 언어의 컴파일러를 올바르게 작성할 수 있도록 이상한 표현이 무엇인지 해석 할 수있는 사람이 있습니까?PL/0에서 "홀수"표현

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

답변

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

, 복귀 '참'값이 홀수 인 경우. C에서 :

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