在Bison和Flex语法中重用规则

时间:2013-01-15 14:10:51

标签: bison flex-lexer

我试图在客户端和服务器之间建立一个Request-response消息序列。 为解析消息我使用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

1 个答案:

答案 0 :(得分:0)

如果没有看到更多的yacc规格,诊断问题有点困难。特别是,查看response_message的作品(语法规则)会很有帮助。但是,即使没有这些信息,我也注意到您的命名不一致。您有request_hdrresponse_header。这是故意的吗?