编译语义分析实验

来源:互联网 发布:网络购物案列分析 编辑:程序博客网 时间:2024/05/21 11:36


单词的种别编码方案

单词符号

种别编码

单词符号

种别编码

单词符号

种别编码

begin

1

+

13

23

if

2

-

 

14

>=

24

then

3

*

15

=

25

while

4

/

16

;

26

do

5

:=

 

17

{

28

end

6

;

18

}

29

l(l|d)*

10

20

#

0

dd*

11

<> 

21

 

 

算法思想

1、设置语义过程。 

1emit

(char *result,char *ag1,char *op,char *ag2) 

该函数的功能是生成一个三地址语句送到四元式表中。 四元式表的结构如下: 

struct { 

char result[8]; char ag1[8]; char op[8]; char ag2[8]; }

quad[20];  

(2) char *newtemp() 

该函数回送一个新的临时变量名,临时变量名产生的顺序为T1T2,… 

char *newtemp(void) { 

char *p; 

char  m[8]; 

p=(char *)malloc(8);            

k++;             

itoa(k,m,10);             

strcpy(p+1,m);             

p[0]=t;             

return(p); 

2、函数lrparser 在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。

测试结果

 

语法正确。

 

begin错误。

 

表达式错误。

0 0