2013-01-15 2 views
-1

클라이언트와 서버간에 요청 - 응답 시퀀스를 만들려고했습니다. flex와 bison 문법을 사용하고있는 메일을 구문 분석합니다. 다른 문법에서 규칙을 재사용하는 것과 관련하여 질문이 있습니다. 예 I 요청 메시지Bison 및 Flex 문법에서 규칙 재사용

request_message: 
    |request_header_list request_hdr 

이다

req_message: 
    request_message 
    |response_message 
    |error 
    ; 

및 request_hdr 등 처리 요구에 대한 문법이 있으면 제가

같은 문법이 응답

request_hdr: 
    accept 
    |accept_language 
    |bandwidth 
    |user_agent 
    |session 
    |cseq 
    |cache_control 
    .. 
    ; 

유사하다

response_header: 
    cseq 
    |session 
    |range 
    |public 
    |server 
    |content_type 
    .. 
    ; 

cseq을 구문 분석 할 때 하나의 규칙 만 정의했습니다. 이 규칙은 요청을 구문 분석하는 동안 잘 작동합니다. 그러나 응답을 구문 분석하는 동안 규칙이 표시되지 않습니다. 비슷한 규칙이 다른 문법에 사용할 수 없습니까? 요청을 위해 작동하고 응답을 위해 작동하지 않는 이유는 무엇입니까? 렉스 쪽에서, 내가 lexims를 파싱 할 때 문제가 없다는 것을 발견했다면, cseq token을 yacc에 반환 할 수 있습니다.

답변

0

yacc 스펙을 조금 더 보지 않고도 문제를 진단하기가 약간 어렵습니다. 특히, 생산 (문법 규칙)을 response_message으로 보는 것이 도움이 될 것입니다. 그러나이 정보가 없어도 사용자의 이름이 일치하지 않음을 알았습니다. request_hdr이지만 response_header이 있습니다. 그게 의도적 인거야?

+0

response_header는 응답 메시지 전송의 일부입니다 ... 질문에서 정의하지 않았습니다. 요청 헤더와 응답 헤더에는 두 필드가 모두 포함 된 다른 필드가 포함되어 있습니다. – jithin