-1

我试图在客户端和服务器之间创建一个请求-响应消息序列。为了解析消息,我使用了 flex 和 bison 语法。我有一个关于在不同语法中重用规则的问题。例如,如果我有一个用于处理请求的语法

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

4

1 回答 1

0

如果不了解更多 yacc 规范,就很难诊断问题。特别是,查看您的response_message. 但是,即使没有这些信息,我也注意到您的命名不一致。你有request_hdr但是response_header。这是故意的吗?

于 2013-01-15T14:45:59.493 回答