620
2017-10-25 17:47:16
0
언제나 하는 말 이지만 EBNF에 대해 잘 모릅니다. 알고 있는 것은... 언어(문법)를 정의하는 표현식이라는 것 뿐.
또, 언제나 하는 말 이지만 이해하지 못할 정도의 문제는 아닌 것 같습니다. 그러니, 어디가 어떻게 모르겠는지 잘 모르겠습니다.
위 정의에서...
begin
A = B + C
end
는 유효한 표현입니다.
begin
A = B + C;
B = A - C;
C = A
end
도 유효한 표현입니다.
그러나,
begin
A = B * C
end
는 유효하지 않은 표현입니다.
<expression> --> <var> + <var> | <var> - <var> | <var>
에서 * 가 정의되어 있지 않습니다.
숫자의 사칙연산의 경우를 생각해보세요. http://ehpub.co.kr/tag/bnf-표기법/
숫자가 무엇인지 정의해야 하고 연산이 어떻게 되는지 정의해야 합니다.
<expr>:= <operand><mid expr>*
<operand>:=<digit>+
<mid expr>:=<operator><operand>
<digit>:=0|1|2|3|4|5|6|7|8|9
<operator>:=+|-|*|/
라는 문법에서 23+4*7-45-6 은
operand(23) operator(+) operand(4) operator(*) operand(7) operator(-) operand(45) operator(-) operand(6) 인
유효한 expr 입니다. 23과 45는 digit가 2개 사용된 유효한 operand이고 4, 7, 6은 하나의 digit 인 operand 입니다.
즉, 23+4*7-45-6 과 같은 표현이 유효한지 또는 유효하지 않은지 그 문법을 위와 같이 정의한 것 입니다.
이 문법에서 3*6/-25*7 은 유효하지 않습니다. mid expr 은 operator 다음에 operand 가 오도록 정의했는데 / 다음 - 가 왔으니까요.