gpt4 book ai didi

c - 如何将$$、$1、$2...bison伪变量的类型改为GMP变量

转载 作者:行者123 更新时间:2023-11-30 17:46:11 26 4
gpt4 key购买 nike

我正在 flex/bison 中编写简单表达式的计算器,例如 5^(3+2-sin(15)) 。源代码可以在这里找到 - https://github.com/blueboar2/interval 。例如,在interval.y中有这样几行:

| EXP exp { $$ = exp($2);结果=$$; }

| LN exp { $$ = log($2);结果=$$; }

| SIN exp { $$ = sin($2);结果=$$; }

一切都好,因为它们($$、$1、$2)都是 double 。但我想构建更好的计算器,使用 gmp 精度库(例如,小数点后 1000 位)。所以,$$、$1 和其他现在不是 double ,我需要将 +/-/sin/exp 更改为其 gmp 对应项。我该怎么做?

我查看了 gmp 示例目录,其中存在此​​类计算器,但它们只是合并了一个堆栈(固定大小,原文如此),并存储了所有数字。我不喜欢这种方法,部分是因为固定大小的堆栈(需要 glib 添加“增长”数组),部分是因为 $$ = exp($2) 比“从堆栈中获取数字,求幂,放入堆栈”要好得多.

最佳答案

阅读 Bison/Yacc 文档,并查看 %unionYYSTYPE。如果您使用的是 Bison 3.0 或更高版本,请阅读 http://www.gnu.org/software/bison/manual/html_node/Semantics.html

关于c - 如何将$$、$1、$2...bison伪变量的类型改为GMP变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19403300/

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