教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 资料大全 >

编译原理 词法分析器 流程代码解析

来源:网络收集 时间:2026-05-16
导读:  编译原理 实   验   报   告  课程名称 实验项目名称  学号 姓名  编译原理实验 词法分析器 XXXXXXXXXX XXX 计算机  科学与技术学院  班级 专业  XXXXXX 计算机 科学与技术 XXX  学生所在学院 指导教师  实验室名称地点   

编译原理

实      验      报      告  

课程名称  实验项目名称  

学号  姓名  

编译原理实验  词法分析器  XXXXXXXXXX  XXX  计算机  

科学与技术学院  

班级  专业  

XXXXXX  计算机  科学与技术  XXX  

学生所在学院  指导教师  

实验室名称地点    

                                                                                     

 XXXXXX大学  

计算机科学与技术学院  

一、实验概述  

1.  实验名称  【词法分析器】  2.  实验目的  

! 理解编译器的工作原理;  ! 掌握编译器的构造方法;  ! 掌握词法分析器生成工具的用法;  ! 加深对编译器词法分析阶段的理解。  3.  实验类型  【设计】  4.  实验内容  

! 对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式显示;  ! 可以将要分析的程序保存到文件中进行读取;    ! 删除无用的空白字符、回车符、及其它非实质性符号。  

二、实验环境  

! 实验使用的操作系统:Window  XP    ! 编程环境:Visual  C++  6.0      

三、实验过程  

1.  原理分析  

词法分析器又称扫描器,词法分析程序的主要任务是从构成源程序的字符串

中识别出一个个具有独立意义的语法单位(单词)。词法分析程序的输入为字符串,而输出为提供给语法分析的单词串。为了能够从源程序文本中分离出这些单词,词法分析程序首先必须对源程序文本进行编辑,例如消除文本中的注释,空格,换行符以及其他一切对语法分析和代码生成均无关的信息。其次还需要区别单词究竟是标识符、数字、运算符或其他符号。最后还应该用文法的形式将它们表示出来,并存储在符号表中。词法分析器主要特点是不依靠语法,而只依靠词法,即处理一个单词时不依赖于外部单词的信息,因此词法分析器一般都很简单。当然,对某些语言在作词法分析时,在有些情况下不得不往前查看多个字符,有时还要做一些特殊处理,还有一些在词法分析中处理不了的,要留到语法分析中进行处理。  

 2.  设计思路  

本算法主要利用状态转换图生成一个词法分析器,对输入的程序进行词法分析,并将分析得到的单词造表。其中关键字表和界限符表的大小是由高级语言的子集决定的,可以用数组装载;而标识符表和常数表的大小取决于输入的待分析程序中的变量、过程名、常数的个数,所以要用指针组成动态链表来装载。当然为了方便,我们也把它定义成数组处理。算法根据C语言单词符号类型不同,现将其分为关键字、普通标示符、常数和界符这四类,为简化程序判定复杂程度,现引入界符一词,所谓界符就是就是成对出现的符号,比如{  }、[  ]、"  "  、'  '  等等。扫描字符串过程以遍历单词类型的形式循环进行,即在未识别出具有独立意

义的最小语法单位并且尚未判定所扫描的字符串无效,无法识别之前,将所扫描的字符串先统一集中存储在一个字符串数组之中,而后,每识别出一个单词,若这个单词的类型是关键字、普通标示符、常数或界符中之一,那么就将此单词以文字说明的形式输出。  

 3.  流程图:  

4.  状态转换图:  

     

5.  符号串分类表:  关键字(Keywords)  

int char float double short long if else switch case default for while do void return continue break const goto volatile static

unsigned  signed  struct  enum  union  auto    register  extern  sizeof  typedef  asm  bool  explicit  export  friend  inline  mutable  operator  template  typeid  virtual  warch_t  delete  namespace    typename  using  const_castdynamic_cast    reinterpret_cast  static_cast  class  new  public    private  protected  this  try  throw  catch  (true  false)  

标识符(Identifiers)  1)  标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,  2)  不能把C语言关键字作为标识符,例如if  ,define  ,for,  while等.  

3)  标识符长度是由机器上的编译系统决定的,一般的限制为8字符  

(注:8字符长度限制是C89标准,C99标准已经扩

充长度,其实大部分工业标准都更长)。  

4)  标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写。  

5)标识符命名应做到“见名知意”,例如,length(表示长度),sum(表示求和),pi(表示圆周率)……  

常数(Constans)  

1)规定的数量与数字。  2)一定的重复规律。  3)一定之数或通常之数。  4)一定的次序。  

5)常数是具有一定含义的名称,用于代替数字或字符串,其值从不改变。  

运算符(Operators)  

1)算术运算符:*  -  +  /  

2)关系运算符:  >  <  ==  !=  >=  <=  3)逻辑运算符:!  &&  ||  4)位运算符:<<  >>  ~  |  ^  &  5)赋值运算符:=及扩展赋值运算符  6)条件运算符:?:  7)逗号运算符:,  8)指针运算符:*和&  9)求字节数运算符:sizeof  

10)强制类型转换运算符:(类型)  11)分量运算符:.  ->  12)下标运算符:[  ]  

13)其他:如函数调用运算符:()  

界符(Delimiters)  

6.  实验代码及注释  

#include<string.h>  #include<stdio.h>  #include<stdlib …… 此处隐藏:6755字,全部文档内容请下载后查看。喜欢就下载吧 ……

编译原理 词法分析器 流程代码解析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/1814464.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)