编译原理 厦大 实验一
需积分: 0 182 浏览量
更新于2011-06-29
收藏 62KB DOC 举报
编译原理词法分析器实验报告
一、实验目的:
本实验的目的是通过实现词法分析器,更加深入地掌握词法分析的原理和技术。在编译原理课程中,词法分析是编译过程的第一阶段,它将源代码分解成一个个Token,以便后续的语法分析和语义分析阶段。本实验要求使用C++实现词法分析器,对输入的文本文件进行词法分析,并输出结果。
二、实验过程:
实验过程可以分为三个部分:主程序分析、词法分析过程和实验过程中的问题。
1. 主程序分析:
需要读入一个文本文件,然后判断该文本文件是否成功打开和读入。如果成功打开,则进行词法分析。
2. 词法分析过程:
词法分析过程的核心是判断单词类别并产生类号。根据输入单词的第一个有效字符(有时还需读第二个字符),可以判断单词类别,如标识符、关键字、操作符、比较符等。对于标识符和常数,需要分别与标识符表和常数表中已登记的元素相比较,比较之后输出结果。
三、实验代码:
实验代码主要包括以下几个部分:
1. 包含头文件:#include <stdio.h>、#include <stdlib.h>、#include <string.h>、#include <ctype.h>、#include <malloc.h>、#include <conio.h>
2. 定义关键字数组:char *keyword[34]={"auto","break","case","char","const","continue","default","do","double", "else","enum","extern","float","for","goto","if","int","long","register", "return","short","signed","sizeof","static","struct","switch","typedef", "printf","union","unsigned","void","volatile","while","main"}
3. 定义操作符数组:char *operatornum[6]={"+","-","*","/","++","--"}
4. 定义比较符数组:char *comparison[8]={"<","<=","=",">",">=","<>","==","!="}
5. 定义间隔符数组:char *interpunction[8]={",",";",":=",".","(",")","{","}"}
6. 定义特殊标识符数组:char *biaoshifu[6]={"%","$","^","&","_","#"}
7. 定义注释符数组:char *zhushifu[3]={"//","/*","*/"}
8. 定义逻辑运算符数组:char *luoji[3]={"&&","||","!"}
9. 实现search函数:bool search(char searchstr[],int wordtype),该函数用于判断输入单词是否在数组中。
四、实验结果:
通过实验,我们可以了解词法分析的原理和技术,掌握如何使用C++实现词法分析器,并输出结果。
五、实验中遇到的问题:
在实验过程中,我们遇到了很多问题,如不知道如何下手、不明确输入输出等。通过看PPT和书本内容,我们逐渐把握了诀窍,并最终实现了词法分析器。
本实验报告记录了编译原理实验的一次尝试,我们通过实现词法分析器,掌握了词法分析的原理和技术,并输出结果。
lovehjornot
- 粉丝: 3
- 资源: 7
最新资源
- SPEA2学习笔记ppt
- 手把手教你使用使用Andriod studio 开发一个简单的安卓APP
- Android汽车租赁系统源码(高分项目)
- MOEA/Dppt汇报
- Augmented and Virtual Reality,增强现实和虚拟现实课件,COMP3025J
- 将jar打exe所需环境
- ros机器人控制演示,本项目基于ROS平台,完成了仿真机器人加载、SLAM建图、单机器人导航、多机器人导航等程序演示(源码+说明文档)
- 基于Uniapp + uView UI开发的社区电商微信小程序源码(高分项目)
- IBM RPA 软件机器人产品介绍
- Vue.js 是一个渐进式的 JavaScript 框架,主要用于构建用户界面 它以其轻量、易学、灵活和高效的特点受到广大开发者的喜爱 本文详细介绍vue框架的起源与特点、起源与特点、应用场景、资源等