(计算机软件与理论专业论文)cml指针类型编译程序的设计与实现.pdf_第1页
(计算机软件与理论专业论文)cml指针类型编译程序的设计与实现.pdf_第2页
(计算机软件与理论专业论文)cml指针类型编译程序的设计与实现.pdf_第3页
(计算机软件与理论专业论文)cml指针类型编译程序的设计与实现.pdf_第4页
(计算机软件与理论专业论文)cml指针类型编译程序的设计与实现.pdf_第5页
已阅读5页,还剩58页未读 继续免费阅读

(计算机软件与理论专业论文)cml指针类型编译程序的设计与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 本文主要介绍了如何在c m l 语言中实现带指针类型的编译器。 指针类型在编译器中的实现主要涉及到语法分析、语义分析、中间代码生成以及 存储空间的管理。 语法分析器有三类。一类是通用的语法分析方法,如c o r c k e - y o u n g e r - k a s a m i 算法 和f a r l e y 算法,这些分析方法能分析任何文法l 。然而这些方法在生成编译器时效率 太低。另外两种是编译器常用的是自顶向下的方法和自底向上的方法。不论哪种方法, 语法分析程序都是自左向右的扫描输入字符串,每次读一个符号。本文采用的是自顶 向下的方法的一种:u 1 ) 分析方法。 在编译器的语法分析阶段对指针类型进行分析只能完成指针类型的定义和使用是 否在语法上正确,而不能做进一步的分析,进一步的分析需要在语义分析和类型检查 阶段才能完成。 因此,针对指针类型在语法分析阶段主要工作: 指针类型的定义在语法是否正确; 指针变量的使用在语法上是否正确。 指针类型定义的分析是建立在普通类型定义分析的基础之上,处理的规则很简易, 如果在类型定义时是指针类型,向前看t o k e n 必须是标识符。指针变量的使用的分 析很简单,对于指针变量的使用,前面必定是一个标识符,不管它是变量标识符还是 域名标识符,变量标识符和域名标识符只是决定了该指针类型是一个普通的指针类型, 还是一个记录类型中的一项。 。 在词法分析和语法分析之后,编译器要进行的工作就是语义上的分析。在语义分 析时要结合各种符号表技术以进行查找。要判断指针类型在语义上是否正确,主要要 解决以下问题; 指针类型的定义在语义上是否正确。 指针变量的使用在语义上是否正确。 指针变量语义上的检查主要工作在于首先检查该交量是否是指针类型,如果是指 针类型,它的用法在语义上正确吗? 对于第一个问题,该变量是指针类型吗? 这个问 题很好解决,只要在符号表中进行查找,如果找到且是指针类型,表明正确,其余均 为错误。指针变量的使用在语义上是否正确要进行迭代,即每次循环在变量后面如果 有 a 就把该符号消耗掉,同时在符号表中检查它是否是指针类型。另外在这个阶段, 还需要涉及超前声明和回填。 1 c o m p i l e r s :p r i n c i p l c s , t c c l m i q u e a a d t o o l s 人民邮电出版社2 0 0 2 b y a i f c e c lv a h o r a y is e t h , j e f f r e ydu 1 l r t m 1 6 0 i 指针类型主要用在赋值语句和作为过程的参数时使用。它和一般类型检查类似。 首先判断是否是指针类型,然后把它们所指向的目标类型的指针进行比较,如果相同, 就表明是等价的,否则报错。 存储空间的管理主要由栈式分配和堆式分配两种方法。本文主要对堆式分配进行 了介绍。堆区空间主要用于存放动态申请空间变量的值。凡是动态申请的空间都分配 到堆区中,对于我们的c m l 语言来讲就是指针类型的分配。 动态存储管理的基本问题是系统如何应用户提出的“请求”分配内存? 又如何回 收那些用户不再使用而“释放”的内存,以备于新的“请求”产生时重新进行分配? 对于响应用户提出的分配内存的请求,只需要在堆区中查找满足要求的空间即可,对 于释放,在释放空间时要进行相邻空闲空间的合并,以减少碎片。这就要求在进行释 放时,要进行相邻空间的检查,看是否是自由空间,如果是,就进行合并,如果不是, 则简单的释放。具体有4 种情况: 释放块的左、右邻区均为占用块,此时只要作简单的释放即可。 释放的左邻区为空闲块,而右邻区为占用块:由于释放块的头部和左邻空闲块的 底毗邻,因此只要改变左邻空闲块的结点;增加结点的s i z e 域的值且重新设置结点。 释放的右邻区为空闲块,而左邻区为占用块。由于释放块的底部和右邻空闲块的 头部毗邻,因此,当表中结点由原来的右邻空闲块变成合并后的大空闲块时,结点的 底部位置不变,但头部要变,由此,链表中的指针也要变。 释放块的左、右块均为空闲块:为使三个空闲块成为一个大的结点留在可利用空 间表中,只要增加左邻空闲块的s p a c e 容量,同时在链表中删除右邻空闲块的结点即 可。 在本文中没有涉及垃圾回收的问题。垃圾回收是更现代的语言如j a v a 、c 的一 个重要特征。垃圾收集中大量的工作都由垃圾算法来完成。任何一种垃圾收集算法都 必须做两件基本的工作:首先,它必须检测到垃圾对象的存在;其次,它必须回收垃 圾对象所占据的堆空间,并将堆空间归还给系统,让应用程序能够继续使用。一般来 说,实现垃圾检测的方式是:定义一组根结点,并从根结点出发检查其他结点的可到 达性。如果存在一条引用路径,使得执行中的程序能够从根结点出发访问到被检查的 对象,则该对象就是“可到达”的。所有从根结点可到达的对象都被认为是“活”对 象,而不可到达的对象则认为是垃圾,因为它们不会再对程序未来的执行造成任何影 响。 将活对象和垃圾区分开来有两种算法:引用计数和遍历。引用计数型垃圾收集器 会在堆上的每个对象中保存一个计数器,用这个计数器来记录指向该对象的引用个数, 并以此来区分活对象和垃圾对象。另一方面遍历型垃圾收集器则是从根结点开始切实 地遍历整个引用图。在遍历过程中遇到的对象就做上某种标记。遍历结束后,未被标 记的对象就是不可到达的,因此被作为垃圾回收。 关键词:指针类型,内存分配,编译器 a b s t r a c t t h i sp a p e rm a i n l yi n t r o d u c e dh o wt oi m p l e m e n tp o i n t e rt y p ei nc m ll a n g u a g e p o i n t e rt y p ei m p l e m e n t e di nc o m p i l e ri n v o l v e ss y n t a xa n a l y s i s ,s e m a n t i ca n a l y s i s , i n t e r m e d i a t ec o d eg e n e r a t i o na n ds t o r a g e - s p a c em a n a g e r t h e r ea r et h r e eg e n e r a lt y p e so f p a r s e r sf o r 掣锄n m a r u n i v e r s a lp a r s i n gm e t h o d ss u c h 鹪t h ec o c k e - y o u n g e r - k a s a m ia l g o r i t h ma n de a r l e y sa l g o r i t h mc a np a r s ea n y 乒a i t h e s em e t h o d s h o w e v e r , a r et o oi n e f f i c i e n tt ou s ei np r o d u c t i o nc o m p i l e r s t h em e t h o d s c o m m o n l yu s e di nc o m p i l e r sa r ec l a s s i f i e da sb e i n ge i t h e rt o p d o w l l o rh o t t o m - u p a s i n d i c a t e db yt h e i rn a l n e s ,t o p - d o w np a r s e r sb u i l dp a r s et r e e sf r o mt h et o p ( r o o t ) t ot h e b o t t o m ( 1 e a v e s ) ,w h i l eb o t t o m - u pp a r s e r ss t a r tf r o mt h el e a v e sa n dw o r ku pt ot h er o o t i n b o t h s 鹤,t h ei n p u tt ot h ep a r s e ri ss c a n n e df x o ml e rt or i g h t ,o n es y m b o la ta t i m e :i nt h i s p a p e r , w eu s ee l ( 1 1p a r s i n gm e t h o d , am e t h o do f t o p - d o w n m e t h o d i nc o m p i l e rs y n t a xa n a l y s i sp h a s e ,p o i n t e rt y p ea n a l y s i so n l yc a nc o m p l e t ep o i n t e rt y p e d e 血e da n du s e di sc o r r e c to rn o ti n 罂孤n m 虬b u ti tc a nn o td om o r ea n a l y s i s ,m o l ea n a l y s i s n e e dw o r ki ns e m a n t i c - a n a l y s i sa n dt y p ec h e c kp h a s e s om a i n l yw o r ki ns y n t a xa n a l y s i s p h a s ef o rp o i n t e rt y p ei s : c h e c kp o i n t e rt y p ed e f i n e di ns y n t a x c h e c kp o i n t e rv a r i a b l eu s e di ns y n t a x t h ea n a l y s i sf o rp o i n t e rt y p ed e f i n e db a s e do no r d i n a l yt y p e s ,p r o c e s sr u l e si sv e r y s i m p l e i ft y p ed e f i n e di sp o i n t e rt y p e ,f o r e w o r dt o k e nm u s tt ob ei d e n t i f i e r ( i d ) p o i n t e r v a r i a b l eu s e da n a l y s i si sab “d i 伍c u l t t h et o k e nb e f o r et h i sv a i l a b l em u s tt ob eai d e n t i f i e r , i ns p i t eo fv a r i a b l ei d e n t i f i e ro rf i e l di d e n t i f i e r v a r i a b l ei d e n t i f i e ra n df i e l di d e n t i f i e ro n l y d e f i n et h i sp o i n t e rv a r i a b l ei sas i m p l ep o i n t e rt y p eo rae n t r yo f a r r a yt y p e a f t e rl e x i c a la n a l y s i sa n ds y n t a xa n a l y s i s ,t h ec o m p i l e rm a i n l yw o ki ss e m a n t i c a n a l y s i sp h a s e 1 nt h i sp h a s e c o m p i l e r sw i l lu s ea l lk i n & o fs y m b o lt a b l et e c h n i q u ef o r s e a r c ht od e t e r m i n et h ec o r r e c t i o no f p o i n t e rt y p ei ns e m a n t i c ,m a i n l yp r o b l e m i s : c h e c kp o i n t e rt y p ed e f i n e di ns e m a n t i c c h e c kp o i n t e rv a r i a b l eu s e di ns e m a n t i c m a i n w o r kf o rc h e c k i n gp o i n t e rt y p ed e 血e di ns e m a n t i ci sc h e c k i n gt h i sv a r i a b l ei s p o i n t e rt y p e ? i f y e s ,t h eu s e do f t h i sv a r i a b l ei sc o r r e c t e di ns e m a n t i c ? t h ef i r s tq u e s t i o ni s s os i m p l e ,w ec a nd 0i tj u s ts e a r c h i n gi ns y m b o lt a b l e ,i fs e a r c h e di ta n di t st y p ei sp o i n t e r t y p e ,e x p r e s si ti sr i 曲t ,o t h e ri sw r o n g w em u s tu s ei t e r a t ea l g o r i t h mt op r o c e s sc h e c k i n g p o i n t e rv a r i a b l eu s e di ns e m a n t i c ,蠲w e l l 舔c o u s b i n c dac a r e t ( ) n o t a t i o na tal o o p s t a t e m e n t , a n dc h e c k e di ti sp o i n t e rt y p ei ns y m b o lt a b l e i nt h i sp h a s e ,w ea l s on e e di n v o l v e f o r e w o r dd e c l a r a t i o na n df i l l - b a c kt e c h n i q u e m t h et y p ec h e c k i n gf o rp o i n t e ri sa n a l o g u et y p ec h e c k i n gf o ro r d i n a r yt y p e ,b e c a u s et h e p o i n t e ri sm a i n l yu s e di na s s i g ns t a t e m e n ta n da sf o ra r g u m e n t sf o rp r o c e d u r e s f i r s t d e t e r m i n ei ti sap o i n t e rt y p e ,a n dt h e nc o m p a r et h e i rt a r g e tt y p e i fe q u a l ,i ti sr i g h t , o t h e r w i s ew r o n g t h eb a s e d q u e s t i o no fd y n a m i c s p a c em a n a g e ri sh o w t or e p l yt h eu s e r sr e q u e s tf o r a l l o c i n gm e m o r y , a n dh o w t 0d e a l l o ct h em e m o r yt h a tu s e rn o tu s e df o rt h en e wr e q u e s tf o r a l l o c i n gm e m o r y f i r s tq u e s t i o ni ss i m p l y , w eo n l yr e t u r nas p a c et h a ti sf r e ea n d s i z eb i g g e r e n o u g h ,f o rd e a l l o c i n g ,w em u s td om o r e w en e e dc o m b i n ea d j a c e n tf r e e s p a c e ,i tc a nh e l p t os h r i n kf r a l c n e m t h e r ea r e4c a s e s : t h el e f ta n dr i g h ta d j a c e n tb l o c ki sn o tf l e e ,i nt h i sc a s e ,w eo n l yr e l e a s ei ta n dd o n t d o m o r e t h el e f tb l o c ki sf r e e ,b u tr i g h ti sn o t i nt h i sc a s e ,w ec o m b i n et h i sb l o c ka n di t sl e f t b l o c kt oab i o c k t h er i g h tb l o c ki sf r e e ,b u tl e f ti sn o t i nt h i sc a s e ,w ec o m b i n et h i sb l o c ka n di t sr i g h t b l o c kt oab l o c k t h el e f tb l o c ka n dr i g h tb l o c ka r ef r e e w en e e dc o m b i n et h et h r e eb l o c k si n t oab l o c k t h ew a yi si n c r e a s i n gt h ec a p a c i t yo ft h em o s tl e f tb l o c ks i z e ,a n dd e l e t e st h er i g h tb l o c k n o d e t h i sp a p e rn o ti n v o l v ei sg a r b a g ec o l l e c t i o n g ci sc h a r a c t e ro ft h em o d e r nl a n g u a g e , s u c ha sj a v aa n dc 撑ag r e a td e a lo fw o r kh a sb e e nd o n ei nt h ea r e ao fg a r b a g ec o l l e c t i o n a l g o r i t h m s a n yg a r b a g ec o l l e c t i o na l g o r i t h mm u s td ot w ob a s i ct h i n g s f i r s t i tm u s td e t e c t g a r b a g eo b j e c t s ;s e c o n d ,i tm u s tr e c l a t mt h eh e a ps p a c eu s e db yt h eg a r b a g eo b j e c t sa n d m a k ei ta v a i l a b l et ot h ep r o g r a m g a r b a g ed e t e c t i o ni so r d i n a r i l ya c c o m p l i s h e db yd e f i n i n g as e to f r o o t sa n dd e t e r m i n i n gr e a c h a b i l i t yf r o mt h er o o t s a n do b j e c ti sr e a c h a b l ei f t h e r ei s s o m ep a t ho fr e f e r e n c e sf r o mt h er o o t s a no b j e c ti sr e a c h a b l ei ft h e r ei ss o m ep a t ho f r e f e r e n c e sf r o mt h er o o t sb yw h i c ht h ee x e c u t i n gp r o g r a mc a na c c e s st h eo b j e c t t h er o o t s a r ea l w a y sa c c e s s i b l et ot h ep r o g r a m a n yo b j e c t st h a ta r er e a c h a b l ef r o mt h er o o t sa r e c o n s i d e r e dl i v e o b j e c t st h a ta r en o tr e a c h a b l ea r ec o n s i d e r e dg a r b a g e b e c a u s et h e mc a l ln o l o n g e ra f f e c tt h ef u t u r ec o u r s eo f p r o g r a m e x e c u t i o n 。 t w ob a s i ca p p r o a c h e st od i s t i n g u i s h i n gl i v eo b j e c t sf r o mg a r b a g ea r er e f e r e n c e c o u n t i n ga n dt r a c i n g r e f e r e n c ec o u n t i n gg a r b a g ec o l l e c t o r sd i s t i n g u i s hl i v eo b j e c t sf r o m g a r b a g eo b j e c t sb yk e e p i n gac o u n tf o re a c ho b j e c to nt h eh e a p t h ec o u n tk e e p st r a c ko f t h e n u m b e ro fr e f e r e n c e st ot h a to b j e c t t r a c i n gg a r b a g ec o l l e c t o r s ,o nt h eo t h e rh a n d ,a c t u a l l y t r a c eo u tt h eg r a p ho fr e f e r e n c e ss t a r t i n gw i t ht h er o o tn o d e s o b j e c t st h a ta r ee n c o u n t e r e d d u r i n gt h et r a c ka r em a r k e d i ns o m ew a y a f t e rt h er a c ei sc o m p l e t e ,u n m a r k e do b j e c t sa r e k n o w nt ob eu n r e a c h a b l ea n dc a l lb eg a r b a g ec o l l e c t e d k e y w o r d s :p o i n t e rt y p e ,a l l o c a t em e m o r y , c o m p i l e r i v 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取 得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中 不包含其他人已经发表或撰写过的研究成果,也不包含为获得东北师范大学 或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研 究所做的任何贡献均已在论文中作了明确的说明并表示谢意。 学位论文作者签名:韩堡垒日期:逆2 :2学位论文作者签名:轻釜显日期:2 竺2 :2 学位论文版权使用授权书 本学位论文作者完全了解东北师范大学有关保留、使用学位论文的规 定,即:东北师范大学有权保留并向国家有关部门或机构送交学位论文的复 印件和磁盘,允许论文被查阅和借阅。本人授权东北师范大学可以将学位论 文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或其它 复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名: 日期: 学位论文作者毕业后去向: 工作单位: 通讯地址: 指导教师签名: 日期: 电话: 邮编: 引言 编译程序的实现是计算机软件领域一门重要的技术。现代的程序设计语言大都包 含指针或类似指针的数据类型,指针类型的编译实现技术成为编译技术中的一个重要 方面。 c m l 语言是一种过程式教学实验语言。本文讨论了c m l 语言中指针类型的编译 实现技术。为研究包含指针类型程序设计语言的编译方法、实现手段等提供了重要参 考。 本文从语法分析、语义分析、运行时存储空间的管理以及目标代码的生成等方面 描述了c m l 语言指针类型的编译实现技术。在语义分析和运行时空间的管理,特别 是堆区的管理方面进行了详细描述。 运行时空问的管理,特别是堆区的管理,对于指针的实现起着关键的作用,本文 对其进行了详细的探讨,并给出一个具体的实现来进行说明。 第一章绪论 本章主要介绍了在c m l 语言中实现带指针类型的编译器的背景,指明了这项研 究的意义,介绍了目前研究的现状和本文的主要工作。 1 1 课题研究的背景 编译器是一个将一种语言翻译成为另一种语言的计算机程序。编译器将用这种语 言编写的源程序作为输入,而产生用目标语言编写的等价程序。编译器的实现方法已 经成熟,但对于指针类型的实现在一般资料中很少提及。本文是在已有的c m l 语言 的基础之上,扩充了指针类型。c m l 是cm i n u sl a n g u a g e 的缩写,顾名思义,本质 上它是c 的一个子集,但省却了一些重要的部分,因此称为c m l 。c m l 语言它只有 较为简单的数据类型,整型和空类型,所以数据操作集合也较小,只能进行简单数据 操作。如加减乘除等简单的运算。但它缺少指针类型,本文就是在其基础之上,为其 扩充指针类型。 1 2 课题研究的主要目的 编写编译器的原理和技术具有十分普遍的意义,以至于在每一个计算机工作者的 研究生涯中,这些原理和技术都会反复的用到。编译器的编写涉及到程序设计语言、 计算机的体系结构、语言理论、算法和软件工程等学科。本文研究的主要目的在于掌 握编译程序中最复杂的堆式分配的方法,给出一种实现的方法,通过在编译程序中实 现指针类型来更好的掌握编译原理。 1 3 论文完成的主要工作 本文的主要工作就是在已有的c m l 语言的编译器的基础之上,增加指针类型, 并对指针类型的实现、堆式空间的分配以及管理进行一些初步的探讨,提出自己的观 点。 2 第二章词法分析 2 1 词法分析概述 编译器总是要用某种程序设计语言来编写,而用程序设计语言编写的程序其操作 对象必须是该语言所规定的数据。编译器操作的对象是程序中的各种语法单位,如 、 、 、 、 、 、 等等。因此必须把它们都表示成某种数据结构形式,而它们的最小单位是所谓的单词, 故首先要把每个单词转换成一种数据形式,通常称它们为1 0 狲。词法分析器的任 务就是从源程序的a s c i i 码序列逐个地拼出单词,并构造相应的t o k e n 数据表示。 词法分析程序可有两种,一种是它作为语法分析的一个子程序,另一种是它作为 编译器的独立的一遍任务。本文采用的是第二种方法。 词法分析程序的主要任务是:识别标识符、关键字、常数、剔除空白字符和注释, 把源程序转换成一个个的t o k e n 流。 2 2o m l 语言所定义的词法 c m l 语言中所定义的词法为: 1 关键字; e l s e ,i f , i n t ,l e t u i 豇v o i d , w h i l e 所有的关键字都是保留字,并且必须是小写。 2 专用符号: + _ = ! = = ,() 【】 3 其他标记是d 和n u m : i d = l e t t e rl e t t e r * n u m ;d i g i td i g i t l e t t e r = ai iziai 。lz m g i t = oi i9 小写和大写字母是有区别的。 4 空格由空白,换行符和制表符组成。空格通常被忽略,除了它必须分开d , m m 关键字。 5 注释用严围起来,注释可以放在任何空白出现的位置( 即注释不能放在标 记内) 上,且可以超过一行,注释不能嵌套。 2 3 词法分析的主要任务 词法分析程序又称扫描程序,完成的主要任务可以归结为以下几点: 去掉空白字符和注释。 识别e l s e 、i f , i n t 、r e t u r n 、v o i d 、w h i l e 、等这样的保留字对应的t o k e n 码交给 语法分析程序处理。 , 非保留字的字母及数字串,被识别作为标识符并将标识符的t o k e n 码交给语法 分析程序处理,同时保留着当前标识符的值。 识别数字串为数,保存该数,并将对应的t o k e n 码交给语法分析程序处理。 识别像“! = ”、“ = ”、“ s i b l i n g ) ; 3 5 语法分析程序的实现 语法分析程序由p a r s c l l l c p p 文件按照前面l l l 方法的转换规则实现的。对于多 遍扫描编译器的实现,此文件只负责进行语法分析,外部程序直接调用p a r s e l l l c p p 文件方法,即可完成上面的各个步骤。 以下面例子来说明指针类型语法分析的实现: 其语法分析程序结果如下: 1 4 第四章语义分析 在词法分析和语法分析之后,编译器要进行的工作就是语义上的分析。因为它包 括上下文无关文法和标准分析算法以外的信息,因此,它不被看成语法。信息的计算 也与被翻译过程的最终含义和语义密切相关。 程序设计语言的语义可分为静态语义和动态语义。所谓静态语义是指在编译阶段 能检查的语义,而动态主义则指只有在目标码的运行阶段才能检查的语义。如果所有 类型的检查均能在编译阶段进行则称这种语言为强类型语言。c m l 是强类型语言。 语义分析包括构造符号表,变量声明中建立的标识符的含义、在表达式和语句中进 行类型推断和类型检查以及在语言的类型规则作用域内判断它们的正确性。 4 1 语义分析的基础 4 1 1 语义分析内容 在词法分析和语法分析之后,编译器要做的主要工作就是进行语义检查和翻译。 c m l 的语义分析主要完成以下两项工作: 1 构造符号表和信息表: ( 1 ) 构造标识符的符号表; ( 2 ) 构造类型信息表,包括基本类型与复合类型信息表: ( 3 ) 构造过函信息表; ( 4 ) 构造形参信息表。 2 进行语义错误检查,语义错误通常包括下面几类: ( 1 ) 标识符的重复定义; ( 2 ) 无声明的标识符; ( 3 ) 标识符为非期望的标识符类别( 过程名标识符,函数名标识符,变量标识 符一其中包括不同变量与形式参数) ; ( 4 ) 数组成员变量的引用不合法; ( 5 ) 数组下标表达式与数组下标类型不匹配; ( 6 ) 赋值语句的左右两边类型不相容; ( 7 ) 赋值语句左端不是变量标识符( 单独的变量或数组型变量) ; ( 8 ) 过函调用中,形实参类型不匹配; ( 9 ) 过函调用中,形实参个数不相同; ( 1 0 ) 过函调用语句中,标识符不是过函标识符; ( 1 1 ) 函数说明中的函数类型与返回值类型不匹配; ( 1 2 ) i f 和w h i l e 语句的条件部分不是布尔类型; 1 5 ( 1 3 ) 表达式中运算符的分量的类型不相容。 4 1 2 标识符和类型的内部表示 我们知道最小的语义单位是所谓的单词。单词可分为几类,其中除了标识符外, 单词的含义已经完全表示在t o k e n 中,而标识符则在其t o k e n 表示中只有名字信 息,并没有代表其含义的任何其他信息。因此,对于每个标识符要构造出表示其含义 的属性记录,并用某种结构的表称之为标识符的属性表或简称符号表标识符 来记录每个标识符的含义。有了标识符的属性表后可检查类型、说明、表达式和语句 等复杂成分的语义错误。我们的语义分析器就是完成这些工作。 在c m l 编译器中,标识符可以是变量名、过程名,因此是把变量标识符、过程 函数标识符添加到符号表。t y p e d e fe n u m v a r k i n d ,p r o c k i n d i d k i n d ;其中数组 类型没有单独的表示出来,在实现时是把它作为一个正常的变量名来表示。下面就对 标识符类型内部表示及属性结构定义进行说明: 标识符类型的内部表示为: t y p e d e f s t r u c t t y p e l r h a t s i z e ; 严类型所占空间大d x * t y p e k i n d k i n d ; s t r u c t s t r u c tt y p e i r + i n d e x t y ; s t r u c tt y p e i r + e l e m t y ; h a tn u m :纪录数组子界范围即元素个数 a r r a y a t t r ; t y p e i r ; 2 标识符的属性结构定义: t y p e d e f s t r u c t s t r u c tt y p e i r + i d t y p e ;产指向标识符的类型内部表示 i d k i n d k i n d ; 严标识符的类型+ u n i o n s t r u c t a c c e s s k i n d a c c e s s ;严判断是变参还是值参+ i n t l e v e l ; i n t o 位 b o o li s p a r a m ;严判断是参数还是普通变量,1 是参数,0 是普 通变量+ 1 6 v a r a t t r :严变量标识符的属性, s t r u c t h a t l e v e l ; 严该过程的层数。 p a r a m t a b l e p a r a m ; 严参数表 h a t 。 m o t i j严过程活动记录a r 的大小+ , i n t n o i v ;严s p 到d i s p l a y 表的偏移量 h a t p r o c e n t r y ;i 过程的入口地址。 h a t c o d e e n t r y ;过程入口标号,用于中间代码生成+ p r o c a t t r ;宰过程名标识符的属性 ,m o r e ;* 标识符的不同类型有不同的属性+ , a t t r i b u t e i r ; 4 1 3 符号表的结构 符号表是存放标识符信息的一种表,其中的信息表示的是标识符的属性( 语义) ,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论