编泽原理 特义分行和中闻代弱户生 中间语言 几种常见的中间语言形式 后缀式 三地址代码(包括三元式、四元式、间接三元式) DAG图表示 第6列
编译原理 第6页 语义分析和中间代码产生 中间语言 几种常见的中间语言形式 后缀式 三地址代码(包括三元式、四元式、间接三元式) DAG图表示
编泽原理 婚义分桥和中国代号产生 后缀式 后缀式表示法又称逆波兰表示法。 这种表示法是把运算量(操作数)写在前面,把算符写在后 面(后缀)。 例如,把a十b写成ab+,把a*b写成ab*。 第7觉
编译原理 第7页 语义分析和中间代码产生 后缀式 后缀式表示法又称逆波兰表示法。 这种表示法是把运算量(操作数)写在前面,把算符写在后 面(后缀)。 例如,把a十b写成ab+,把a*b写成ab*
编泽原理 特义分行和中闻代弱产熊 一个表达式E的后缀形式 (1)如果E是一个变量或常量,则E的后缀式是E自身。 (2)如果E是E1opE2形式的表达式,这里op是任何二元操作 符,则E的后缀式为E1E2op,这里E1'和E2'分别为E1和E2 的后缀式。 (3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后 缀式。 后缀式表示法用不着使用括号。根据运算量和算符出现的 先后位置,以及每个算符的目数,就完全决定了一个表达式 的分解。 第8负
编译原理 第8页 语义分析和中间代码产生 一个表达式E的后缀形式 (1)如果E是一个变量或常量,则E的后缀式是E自身。 (2)如果E是E1 op E2 形式的表达式,这里op是任何二元操作 符,则E的后缀式为E1′E2′op,这里E1′和E2′分别为E1和E2 的后缀式。 (3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后 缀式。 后缀式表示法用不着使用括号。根据运算量和算符出现的 先后位置,以及每个算符的目数,就完全决定了一个表达式 的分解
编译原理 婚义分桥和中闻代号产熊 只要知道每个算符的目数,对于后缀式,不论从哪一端进行 扫描,都能对它正确进行唯一分解。 表7.1 把表达式翻译成后缀式的语义规则描述 产生式 语义规则 E→E1opE2 E.code:=E1-codel lEz.codel lop E→(E) E.code:=E1.code E→id E.code:=id 第9觉
编译原理 第9页 语义分析和中间代码产生 只要知道每个算符的目数,对于后缀式,不论从哪一端进行 扫描,都能对它正确进行唯一分解
编泽原理 语义分折和中闻代弱产美 图表示法 包括DAG与抽象语法树 无循环有向图(Directed Acycli简称DAG)。 与抽象语法树一样,对表达式中的每个子表达式, DAG中都有一个结点。一个内部结点代表一个操作符,它 的孩子代表操作数。 与抽象语法树不同的是,在一个DAG中代公共子表达 式的结点具有多个父结点,而在一棵抽象语法树中公共子表 达式被表示为重复的子树。 第0
编译原理 第10页 语义分析和中间代码产生 图表示法 包括DAG与抽象语法树 无循环有向图(Directed Acycli简称DAG)。 与抽象语法树一样,对表达式中的每个子表达式, DAG中都有一个结点。一个内部结点代表一个操作符,它 的孩子代表操作数。 与抽象语法树不同的是,在一个DAG中代公共子表达 式的结点具有多个父结点,而在一棵抽象语法树中公共子表 达式被表示为重复的子树