c - 使用 Flex+Bison 识别尾递归函数并将代码转换为迭代形式

标签 c recursion bison calculator flex-lexer

我正在编写一个能够接受新函数定义的计算器。意识到新手需要尝试 Fibonacci 等递归函数,我希望我的计算器能够使用 Flex + Bison 识别尾递归函数并将代码转换为迭代形式。我正在使用 Flex & Bison 来完成这项工作。如果您有任何提示或想法,我热烈欢迎。谢谢!

编辑:

我们不用担心 Flex & Bison 的 C 或 C++ 输出。主要是我想要一个想法或提示。谢谢。

最佳答案

正如我在评论中所建议的,这对于词法分析器来说根本不是问题,对于解析器来说可能只是轻微的问题。如果你有这样的功能:

func f( a ) 
    if ( a == 0 )  
       return a
    return f( a - 1 )

然后,对于典型的 C 编译器,由优化器/代码生成器将递归调用转换为循环。当然,在解释性计算器中,您可以更加灵活,但我建议它仍然是最后一个应该执行尾调用删除的进程,而不是第一个。

关于c - 使用 Flex+Bison 识别尾递归函数并将代码转换为迭代形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662355/

相关文章:

c - 新建和删除运算符(operator)?

c - C中数组的递归函数

c - 使用 scanf 进行输入读取挂起

parsing - 上下文无关文法的奇怪问题

Bison 不创建 tab.h 文件

c - 使用 libsodium 在 C 中生成伪随机数

java - 如何避免此递归函数调用?

将递归函数更改为非递归函数

c - C中的Seg故障链表递归

c - 如何通过 "win_flex bison"编写纯解析器和可重入扫描器?