gpt4 book ai didi

无法从 Bison 语法文件中检索语义值

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:09 25 4
gpt4 key购买 nike

我正在尝试通过 Bison 3.0(C 解析器生成器)、Flex 2.5.35 和 gcc 4.4.7 在 CentOS 6.0 上开发语言解析器。我有以下 Bison 语法文件:

%{
#include <stdio.h>
%}

%union {
int int_t;
char* str_t;
}
%token SEP
%token <str_t> ID
%start start
%type <int_t> plst

%%

start: plst start
| EOS { YYACCEPT; }
;
// <id> , <id> , ... , <id>
plst: ID SEP_PARAMS plst { printf("Rule 1 %s %s \n",$1,$2); }
| ID { printf("Rule 2 %s \n", $1); }
| /* empty */ { }
;

%%

int yyerror(GNode* root, const char* s) {printf("Error: %s", s);}

问题

像现在这样,算不上什么真正有意义的,但足以理解我认为的问题。假设我有一个用 Flex 编写的扫描仪,它可以识别我的 token 。此语法文件用于识别简单的标识符列表,例如:id1,id2,...,idn。我的问题是,在每个语法规则中,当我尝试获取标识符的值(表示标识符相同的字符串)时,我得到一个 NULL 指针,这也由我的 证明printfs.

我做错了什么?谢谢

编辑

感谢最近的回答,我可以理解这些问题与 Flex 及其配置文件密切相关。特别是我编辑了我的 lex 文件以满足 Flex Manual 描述的规范。对于 Bison 桥接:

{ID}     { printf("[id-token]");
yylval->str_t = strdup(yytext);
return ID; }

但是在运行 Bison、Flex(提供 --bison-bridge 选项)和编译器之后,我执行生成的解析器,我立即得到 Segmentation Fault

有什么问题?

最佳答案

flex 选项 --bison-bridge(或 %option bison-bridge)匹配 bison 选项 %define api.pure。您需要同时使用 bison-bridgeapi.pure 或两者都不用——任何一种方法都可以,但它们需要保持一致。由于您似乎没有使用 api.pure,因此您想删除 --bison-bridge 选项。

关于无法从 Bison 语法文件中检索语义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com