2012-06-20 5 views
0

를 줄/줄입니다. 그러나 필자가 bison에서 복합 문을 번역 할 때 :EBNF 내가 들소이 EBNF를 번역해야 오류

compound_statement : BEGINKEY state ENDKEY ; 
state : | statement stm ; 
stm : | BQUESTIONMARK statement stm ; 

감소/감소 오류가 있습니다.

나를 감히 설명 할 수 없기 때문에 누가 감손/축소 오류가 발생했는지 설명해 줄 수 있습니까? 나는 정말로 감사 할 것입니다.

미리 감사드립니다.

+0

'BQUESTIONMARK' 무엇인가

나는이 같은 문제를 해결까요? – templatetypedef

답변

0

따라서 파스칼 틱어를 사용하는 경우 세미콜론은 종료 기호가 아닌 명령문 구분 기호입니다.

BQUESTIONMARK이 세미콜론 (";") 토큰이라고 가정합니다.

첫 번째 문장이 필요한 한 번의 생산에서 가장 좋은 결과를 얻은 다음, 선택형 추가 진술 을 제공하는 또 다른 왼쪽 재귀 적 생산이라고 생각합니다.

내가 뭔가를 잘못 읽고 될 수 있지만 문법은 state가 엡실론 (널)뿐만 아니라 stm을 할 수 있으며, 그 귀하의 감소/감소 오류의 원인 생각합니다.

compound_statement : BEGINKEY first_statement statements ENDKEY 
        | BEGINKEY first_statement ENDKEY 
        ; 

first_statement : statement ; 

statement : assignment 
      | if_statement 
      | while_statement 
      | proc_func_call 
      | compound_statement 
      ; 

statements : statements statement_with_semi 
      | statement_with_semi 
      ; 

statement_with_semi : BQUESTIONMARK statement ;