一、实验目的
加深对词法分析器的过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。
二、实验内容
自定义一种程序设计语言,或选择已有的一种高级语言(C语言),编制它的词法分析程序。
三、实验要求
1.对单词的构成规则有明确的定义
2.编写的程序能够正确识别源程序中的单词符号
3.识别出的单词以<种别码,值>的形式保存在符号表中
4.词法分析中源程序和分析后的符号表均保存在.txt文件中
5.有一定的检查错误的能力。遇到错误时可显示“Error”,然后跳过错误部分继续显示。
6. 实验报告包括以下内容
(1)编程思路、流程图、源代码
(2)上机调试时发现的问题,以及解决的过程
(3)所使用的测试数据及结果
(4)心得体会
四、实验步骤
1.给出目标语言的所有单词符号及种别编码、单词符号的状态转换图。
2.依次读入源程序,对源程序进行单词切分和识别,直到源程序结束。
3.对正确的单词,按照它的种别以<种别码,值>的形式保存在符号表中。
4.对不正确的单词,做出错误处理。
五、实验条件:
VC++,visio
六、实验内容:
1.编程思路、流程图、源代码;
编程思路:
词法分析是编译的第一个阶段,主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,这些单词符号分为五类,分别是标识符、保留字、常数、运算符、界符,用于语法分析。词法分析程序在识别出下一个单词同时验证其正确性之后,词法分析程序将其以二元组的形式输出(种别码,单词符号),对于不正确的单词,给出错误提示(ERROR),然后跳过并继续识别下一个单词。
流程图:
源代码:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 50
int i, row = 0, line = 0;
char a[1000]; //程序
int number[1000][100]; //常数表
char mark[100][5]; //标识符表
char file,file1;
FILE fp,fwp;
//词法分析
int wordanalysis()
{
if ((a[i] >= ‘A’&&a[i] <= ‘Z’)||(a[i]>=‘a’&&a[i]<=‘z’)) //分析标识符和保留字
{
char word[10];
char pro[100][100] = {“char”,“int”,“if”,“else”,“return”,“break”,“do”,“while”,“for”,“double”,“float”,“short”};
int n = 0;<
词法分析器的构造
最新推荐文章于 2022-02-24 17:25:00 发布