编译原理 语义分析题型
中间语言的形式
常见的中间语言的形式:
后缀式(逆波兰式)
三地址代码
- 三元式
- 四元式
- 间接三元式
后缀式
又称逆波兰表示法,把运算量(操作数)写在前面,把算符写在后面(后缀)。
如:a+b 写成 ab+
a+b * c 写成 abc * +
后缀式要注意的是运算符号优先级
C语言中运算符优先级排序如下:
优先级【高到低】:
分为优先级15级:
1、圆括号【()】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】;
2、逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++】【 --】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*】【&】、长度运算符【sizeof】;
3、乘法运算符【*】、除法运算符【/】、取余运算符【%】;
4、加法运算符【+】、减法运算符【-】;
5、左移动运算符【<<】、右移动运算符【>>】;
6、关系运算符【< 】【>】【<=】【 >= 】;
7、等于运算符【==】、不等于运算符【!=】;
8、按位与运算符【&】;
9、按位异或运算符【^】;
10、按位或运算符【|】;
11、逻辑与运算符【&&】;
12、逻辑或运算符【||】;
13、条件运算符【?:】;
14、赋值运算符【=】【/=】【*=】【%=】【+=】【-=】【<<=】【>>=】【&=】【^=】【|=】;
15、逗号运算符【,】
转自百度百科 运算符
题型:求后缀式
a+b*(c+d/e)>f
后缀式:abcde/+*+f>
(如果加上更多种类运算符就更需要记住它们的优先级)
三元式
带有三个记录域:op(操作符),arg1(左操作数),arg2(右操作数)
(op,arg1,arg2)
如:y+1
(+,y,1)
间接三元式
将按运算的先后顺序列出有关三元式在三元式表中的位置
如:x[i] :=y
(0) (=[ ],x,i)
(1) (:=,(0),y)
x := y[i]
(0) ( [ ]=,y,i)
(1) (:=,x,(0))
四元式
带有四个记录域:op,arg1,arg2,result
如:y:=x+1
(1)(+,x,1,T)
(2)(:=,T,-,y)
翻译模式
布尔表达式的翻译
优先级:not>and>or
A or B : if A then true else B
A and B : if A then B else false
not A : if A then false else true
作为条件控制的布尔表达式
if E then S1 else S2,作为转移条件的布尔表达式E,可赋予它两个出口,一个为“真”出口,出向S1;一个为“假”出口,出向S2
题型:用四元式实现三地址代码
(jnz,a,-,p)表示if a goto p
(jrop,x,y,p)表示if x rop y goto p
rop为操作符,例 j-
(j,-,-,p)表示 goto p
例:while (a<b) do
if (c<d) then x:=y+z
//a<b判断语句while循环,true则跳到(3)
(1)( j< , a , b ,(3))
//判断语句为false则跳到(8)结束
(2)( j , - , - , (8) )
//c<d判断语句,为true跳到(5)
(3)( j< , c , d , (5))
//判断语句为false则跳到(1)
(4)( j , - , - , (1))
//y,z相加赋值给T
(5)( + , y , z , T )
//T的值赋值给x
(6)( := , T , - , x )
//运行完then后的语句跳转回while循环(1)
(7)( j , - , - , (1))
(8)下一条语句
- 点赞
- 收藏
- 分享
- 文章举报
- 编译原理之词法分析、语法分析、语义分析
- 编译原理结构框架7语义分析与中间代码生成
- 编译原理 —— 语义分析
- 2017计科01-08编译原理练习题一语义分析&中间代码生成
- 编译原理---语义分析
- 编译原理语义分析
- 编译原理之语法,语义,词法分析
- 编译原理之词法分析、语法分析、语义分析
- 编译原理实验二:语义分析
- 语义分析和中间代码生成——哈工大编译原理课程(三)
- 编译原理-词法分析-语法分析-语义分析生成中间代码-python版
- 编译原理语义分析(文本输入)源程序
- 编译原理(八) 算符优先分析法(分析过程的算法和C++实现)
- 编译原理-LL(1)预测分析实验 c源代码
- 语法分析_编译原理
- Unity编译Android的原理解析和apk打包分析
- 编译原理:句型分析和有关文法实用的说明
- 编译原理笔记7 自上而下语法分析-…
- 【编译原理】简析文法分析,语法分析
- 编译原理-第三章:语法分析-2