編譯原理 語義分析題型

2021-10-02 04:02:41 字數 1822 閱讀 3994

字尾式

又稱逆波蘭表示法,把運算量(運算元)寫在前面,把算符寫在後面(字尾)。

如:a+b 寫成 ab+

a+b * c 寫成 abc * +

字尾式要注意的是運算符號優先順序

c語言中運算子優先順序排序如下:

優先順序【高到低】:

分為優先順序15級:

1、圓括號【()】、下標運算子【】、分量運算子的指向結構體成員運算子【->】、結構體成員運算子【.】;

2、邏輯非運算子【!】、按位取反運算子【~】、自增自減運算子【++】【 --】、負號運算子【-】、型別轉換運算子【(型別)】、指標運算子和取位址運算子【*】【&】、長度運算子【sizeof】;

3、乘法運算子【*】、除法運算子【/】、取餘運算子【%】;

4、加法運算子【+】、減法運算子【-】;

5、左移動運算子【<<】、右移動運算子【>>】;

6、關係運算子【< 】【>】【<=】【 >= 】;

7、等於運算子【==】、不等於運算子【!=】;

8、按位與運算子【&】;

9、按位異或運算子【^】;

10、按位或運算子【|】;

11、邏輯與運算子【&&】;

12、邏輯或運算子【||】;

13、條件運算子【?:】;

14、賦值運算子【=】【/=】【*=】【%=】【+=】【-=】【<<=】【>>=】【&=】【^=】【|=】;

三元式帶有三個記錄域: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//a(1)( j< , a , b ,(3))

//判斷語句為false則跳到(8)結束

(2)( j , - , - , (8) )

//c(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)下一條語句

編譯原理語義分析 編譯原理 語義分析和符號表

本文使用 zhihu on vscode 創作並發布經過詞法分析 語法分析之後,源程式形式上和結構上的正確性基本得到了保證。然而,僅有形式上的正確性,並不能保證源程式就是完全正確的,還要檢查源程式的含義是否正確。諸如符號的使用是否得當,表示式的型別是否相容等,完成這些功能的編譯階段稱為語義分析。語義...

編譯原理之語義分析

見語法制導翻譯篇 語義是指源程式及其組成部分所表述的含義 和語法不同,語法是關於程式及其組成部分的構成規則的描述,是上下文無關的 而語義是關於語法結構的含義及其使用規則的描述,是上下文有關的。語法上正確,其語義不一定正確。語義分析與中間 生成器基於語義規則,對語法樹進行語義分析 變數是否定義,型別是...

編譯原理語義分析(文字輸入)源程式

include include include include include struct quad struct quad quad 30 int count 0 char expression void char prog 200 token 9 function長度為8,加上 0 所以陣列最...