好文档 - 专业文书写作范文服务资料分享网站

编译原理课程设计-词法分析器(附含源代码) 

天下 分享 时间: 加入收藏 我要投稿 点赞

编译原理-词法分析器的设计

一. 设计说明及设计要求

一般来说,编译程序的整个过程可以划分为五个阶段:词法分析、语法分析、中间代码生成、优化和目标代码生成。本课程设计即为词法分析阶段。词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。如保留字(关键字或基本字)、标志符、常数、算符和界符等等。

二. 设计中相关关键字说明

1. 基本字:也称关键字,如C语言中的 if , else , while , do ,for,case,break,

return 等。

2. 标志符:用来表示各种名字,如常量名、变量名和过程名等。 3. 常数:各种类型的常数,如12,6.88,和“ABC”等。 4. 运算符:如 + ,- , * , / ,%, < , > ,<= , >= 等。

5. 界符,如逗点,冒号,分号,括号,# ,〈〈 , 〉〉等。

三 、程序分析

词法分析是编译的第一个阶段,它的主要任务是从左到右逐个字符地对源

程序进行

扫描,产生一个个单词序列,用以语法分析。词法分析工作可以是独立的一遍,把字符流的源程序变为单词序列,输出在一个中间文件上,这个文件做为语法分析程序的输入而继续编译过程。然而,更一般的情况,常将词法分析程序设计成一个子程序,每当语法分析程序需要一个单词时,则调用该子程序。词法分析程序每得到一次调用,便从源程序文件中读入一些字符,直到识别出一个单词,或说直到下一个单词的第一个字符为止。

四 、模块设计

下面是程序的流程图

五 、 程序介绍

在程序当前目录里建立一个文本文档,取名为infile.txt,所有需要分析的程序都写在此文本文档里,程序的结尾必须以“@”标志符结束。程序结果输出在同一个目录下,文件名为outfile.txt,此文件为自动生成。本程序所输出的单词符号采用以下二元式表示:(单词种别,单词自身的值)如程序输出结果 (57,\等。 程序的功能:(1) 能识别C语言中所有关键字(共32个)(单词种别分别为1 — 32 ,详情见程序代码相关部分,下同)

(2) 能识别C语言中自定义的标示符 (单词种别为 33) (3) 能识别C语言中的常数 (单词种别为0)

(4) 能识别C语言中几乎所有运算符(单词种别分别为41 — 54) (5) 能识别C语言中绝大多数界符 (单词种别分别为 55 — 66) 六 、运行结果 输入文件infile.txt

运行结果(输出文件 outfile.txt) 七 、 设计体会

八、附录部分(程序代码) 单词符号 类别编码 单词符号 类别编码 单词符号 类别单词编码 符号 类别编码 if then else while do begin end long switch case 3 4 5 6 7 8 9 10 11 12 float short 21 22 + - * / < > = := ( ) 31 32 33 34 35 36 37 51 52 53 # . , : >= <= == != % 标识符 62 63 64 65 39 38 41 42 40 1 unsigned 23 continue 24 for signed void default goto sizeof 25 26 27 28 29 30 enum 13 volatile auto double int struct break static 43 44 45 46 47 48 49 ; [ ] { } << >> “ 54 55 56 57 58 59 60 61 常数 2 register 14 typedef 15 char extern return union const

16 17 18 19 20 提示:文件的打开和读写函数:

FILE *fp,*out; //定义文件指针 fp=fopen(\

如果打开文件\失败,则函数返回NULL,即fp=NULL,第二个参数“r”表示以只读方式打开,如果为”w”, 则以可写方式打开

调用fgetc(fp)这个函数一次从fp所指向的文件读取一个字符 char ch=fgetc(fp);

想文件写字符的函数为fprintf(FILE * fp,写进的内容)

比如下面的调用fprintf(outfile,\是把字符串“abcd”写到文件outfile的末尾,并且在后面加上了一个换行标志 文件读写完成后要用函数fclose(fp)关闭。

源代码

#include \#include \#include \

void analzid(FILE *output,char *p) {

int i=0; int count=0;

if (isalpha(p[0]))

{if (strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\

else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\

else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\

else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\

else if(strcmp(p,\

else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else if(strcmp(p,\else {fprintf(output,\ } else

{for(;i<(int)strlen(p);i++) if(isdigit(p[i])) count++; if (count==(int)strlen(p))

{fprintf(output,\ else

if (p[0]=='_'&&(isalpha(p[1]))) {fprintf(output,\

else {fprintf(output,\未定义\\n\ } }

void analzsy(FILE *outfile,char *p) {

if (strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\ else if(strcmp(p,\

编译原理课程设计-词法分析器(附含源代码) 

编译原理-词法分析器的设计一.设计说明及设计要求一般来说,编译程序的整个过程可以划分为五个阶段:词法分析、语法分析、中间代码生成、优化和目标代码生成。本课程设计即为词法分析阶段。词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或
推荐度:
点击下载文档文档为doc格式
7ufg32pi3d4yj364q360565jb3urou010yx
领取福利

微信扫码领取福利

微信扫码分享