2013-01-15 43 views
-1

我試圖在客戶端和服務器之間發出請求 - 響應消息序列。 解析我使用flex和bison語法的消息。 我有一個關於在不同語法中重用規則的問題。 例如,如果我有用於處理請求的語法如重新使用野牛和Flex語法中的規則

req_message: 
    request_message 
    |response_message 
    |error 
    ; 

其中請求消息是

request_message: 
    |request_header_list request_hdr 

和request_hdr是

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

類似地對於響應我有一個語法如

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

對於解析cseq,我只定義了一個規則。該規則在解析請求時正常工作。但在解析響應時,規則沒有顯示出來。有沒有類似的東西,同樣的規則不能用於不同的語法?爲什麼它在請求中工作而不爲響應工作?在lex方面,我發現在解析lexims時沒有問題,它能夠將cseq token返回給yacc

回答

0

在沒有看到更多yacc規範的情況下診斷問題有點困難。特別是,看到response_message的生產(語法規則)會很有幫助。然而,即使沒有這些信息,我注意到你的命名是不一致的。您有request_hdr但是response_header。那是故意的嗎?

+0

response_header是響應消息發送的一部分...我沒有在問題中定義它。請求標頭和響應標頭包含不同的字段,這就是爲什麼我包含這兩個字段。 – jithin