如何在我的中间代码上执行常量折叠和常量传播?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在我的中间代码上执行常量折叠和常量传播?相关的知识,希望对你有一定的参考价值。
所以我的编译器为if else和while生成中间代码(这些结构在C中,即编译器是C编译器接受while和if-else)并将其存储在文件中。
我知道恒定折叠和常数传播如何工作的理论方面。但是当我在读取带有中间代码的文件时,我如何实际编写和实现它。
如果有人能给我一个基本的算法/伪代码,那就太棒了,因为我发现基于阅读文本文件很难实现它。
答案
使用IR读取文本文件时,编译器不应该工作。它应该有一个方便的IR数据结构,并能够转换它。关于常数折叠或常数传播的算法,您应该在适当的书中更好地阅读它们。例如S.S.Müchnick的Advanced Compiler Design and Implementation。
简而言之,常量折叠如下:
const_fold(instr):
if is_bin_exp(instr.oper):
if is_const(instr.arg1) && is_const(instr.arg2):
return = perform_bin(instr.oper, instr.arg1, instr.arg2)
if is_un_exp(instr.oper):
if is_const(instr.arg1):
return = perform_un(instr.oper, instr.arg1)
return Null
以上是关于如何在我的中间代码上执行常量折叠和常量传播?的主要内容,如果未能解决你的问题,请参考以下文章