Bison和Flex语法中规则的重用
我试图在客户端和服务器之间建立一个消息的请求-响应序列。 为了解析消息,我使用了flex和bison语法。 我有一个关于在不同语法中重用规则的问题。 例如,如果我有一个语法来处理请求Bison和Flex语法中规则的重用,bison,flex-lexer,Bison,Flex Lexer,我试图在客户端和服务器之间建立一个消息的请求-响应序列。 为了解析消息,我使用了flex和bison语法。 我有一个关于在不同语法中重用规则的问题。 例如,如果我有一个语法来处理请求 req_message: request_message |response_message |error ; 请求消息在哪里 request_message: |request_header_list request_hdr 请求_hdr是 request_hdr:
req_message:
request_message
|response_message
|error
;
请求消息在哪里
request_message:
|request_header_list request_hdr
请求_hdr是
request_hdr:
accept
|accept_language
|bandwidth
|user_agent
|session
|cseq
|cache_control
..
;
同样地,对于回答,我有一个语法
response_header:
cseq
|session
|range
|public
|server
|content_type
..
;
为了解析
cseq
,我只定义了一条规则。解析请求时,该规则工作正常。但是在解析响应时,规则没有显示出来。是否有类似的情况,相同的规则不能用于不同的语法?为什么它是为请求而工作,而不是为响应而工作?在lex方面,我发现解析lexim没有问题,它能够将cseq令牌
返回到yacc在没有看到更多yacc规范的情况下诊断问题有点困难。特别是,查看响应消息的生成(语法规则)将非常有帮助。但是,即使没有这些信息,我也注意到您的命名不一致。您有request\u hdr
但response\u header
。这是故意的吗 响应\头是响应消息发送的一部分。。。我没有在问题中对其进行定义。请求头和响应头包含不同的字段,这就是为什么我同时包含这两个字段。