2013-02-25 7 views
1

제 컴퓨터 언어 수업에 대한 질문에 대답하는 방법을 모르겠습니다. 나는 EBNF 양식에서 BNF 양식에 다음 문을 변환입니다 :EBNF를 BNF 기초로 변환하십시오.

EBNF : expr --> [-] term {+ term}

나는 중괄호 내에 포함 된 표현이 0 번 이상 반복되도록, 사물이 직각 괄호에 포함 이해 0 또는 하나의 옵션을 나타냅니다. 나의 이해가 정확하다면 이것이 올바른 전환일까요?

내 BNF는 :

expr --> expr - term 
     | expr + term 
     | term 

답변

2

나는 올바른 생각하지 않습니다. 사실, 나는 EBNF가 실제로 유효한 EBNF라고 생각하지 않는다. 질문 How to convert BNF to EBNF에 대한 대답은 ISO/IEC 14977 : 1996, Extended Backus-Naur Form 표준에서 인용 한 유효한 EBNF의 구성 방법을 보여줍니다.

expr --> [-] term {+ term} 

기록한다 :

나는 표현을 생각 0의 순서 다음에

이 표현식이 term 선택적인 빼기 부호 다음에,로 구성되어 있다는 것을 의미
expr = [ '-' ] term { '+', term }; 

, 더 많은 양의 더하기 기호와 term이 있습니다.

다음 질문 : 어떤 방언의 BNF를 타겟팅하고 있습니까? 상황이 까다로워집니다. 많은 방언이 있습니다. 그러나 가능한 번역은 다음과 같습니다.

<expr> ::= [ MINUS ] <term> <opt_add_term_list> 

<opt_add_term_list> ::= /* Nothing */ 
    | <opt_add_term_list> <opt_add_term> 

<add_term> ::= PLUS term 

여기서 MINUS 및 PLUS는 터미널 ('-'및 '+')입니다. 이것은 매우 까다 롭지 만 최소한의 BNF입니다. 다른 가능한 변환은 같다 :

<expr> ::= [ MINUS ] <term> { PLUS <term> }* 

{ ... }* 부분이 없거나 포함 된 패턴 ... (이 예에서는 그렇게 PLUS <term>)의 이상을 의미 어디. 아니면 인용 된 문자를 사용할 수도 있습니다 :

<expr> ::= [ '-' ] <term> { '+' <term> }* 

그래서 가능한 대안 목록이 계속됩니다. 당신은 일할 BNF의 정의를 살펴 봐야 할 것이며 ISO 표준 EBNF가 될 경우 EBNF에 대해 불평해야합니다. EBNF라고하는 임의의 임의의 BNF 스타일의 언어 일 경우 혼동을 일으키는 이름 일 것입니다. 정의 된 한 사적인 방언은 괜찮지 만 방언을 구속하지 않는 사람들이 정답이 무엇인지 알 수는 없습니다.