gpt4 book ai didi

c++ - 数字 flex & Bison

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

我正在编写我的第一个 flex 和 bison 程序,它是一个简单的计算器,我希望计算器支持复数运算。

但是,我无法在其中插入甚至处理任何复数,因为我需要 flex 以某种方式同时处理复数的实际值和图像值并将其传递给 Bison ,并且我不知道 Bison 如何处理 2 个参数。

这是我的 flex 文件:

如您所见,我尝试了一些方法,但这甚至无法编译(使用所有复数过程)。顺便说一句,复数看起来像 1.000+2.111i、3i 等。

最佳答案

如果你想对你的虚数进行算术计算,你可能想创建一个结构体,比如“img_t”,它有两个字段,比如 real 和 img,然后编写具有像“img_t img_add”这样的签名的函数(img_t a, img_t b)”。然后您的 bison 作品将为每个运算符(operator)调用这些函数。你的 yyunion 应该有一个字段 img_t img。如果需要,您也可以在 bison 中执行这些功能。关键是您的 yyunion 中需要一个包含虚数的结构。

typedef struct {
double real, img;
} img_t;


%yyunion {
:
:
img_t img;
};
:
:

expr_complex: expr_complex '+' expr_complex { $$ = img_add($1, $3); }
:
:

如果你在 lex 中看到一个整数或 double ,你想把它变成一个虚数吗?如果是这种情况,那么您可以取消 expr_int 和 expr_double 并让所有 lex 标记返回 img_t。

如果你发布了一些你想解析和评估的表达式,我可以做进一步的评论。

关于c++ - 数字 flex & Bison ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967362/

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