gpt4 book ai didi

c - 如何使用 Bison/Yacc 和递归规则构建数组

转载 作者:行者123 更新时间:2023-12-04 00:11:46 24 4
gpt4 key购买 nike

使用 Bison,我想出了如何将所有内容放入一个长字符串中,如下所示:

arg_list:
WORD arg_list { strcat( $1, "IFS" ); $$ = strcat($1, $2); } |
WORD
;

和:

WORD arg_list { printf("%s, %s\n", $1, $2); }

但问题是我将不得不在第二条规则中再次拆分 $2 来解析它。有没有办法填充数组而不是仅仅使用连接?我是不是走错了路?

如果我需要构建一个有意义的链表之类的东西,只是不确定绑定(bind)到 arg_list 的正确方法是什么,然后清理内存。

最佳答案

如果你有一个带有 push_front 操作的数组类型,这很简单:

arg_list:
WORD arg_list { $$ = $2.push_front($1); }
WORD { $$ = new Array<string>($1); }

没有它,它需要更多的工作。您可以使用 vector 并在末尾添加字符串(顺序相反)。或者您可以使用链表(如果您使用直接 C,这会更容易):

arg_list:
WORD arg_list { $$ = malloc(sizeof(struct list_elem));
$$->next = $2;
$$->val = $1; }
WORD { $$ = malloc(sizeof(struct list_elem));
$$->next = 0;
$$->val = $1; }

关于c - 如何使用 Bison/Yacc 和递归规则构建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429794/

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