编译原理词法分析实验文档格式.docx

上传人:b****3 文档编号:18192737 上传时间:2022-12-14 格式:DOCX 页数:17 大小:252.33KB
下载 相关 举报
编译原理词法分析实验文档格式.docx_第1页
第1页 / 共17页
编译原理词法分析实验文档格式.docx_第2页
第2页 / 共17页
编译原理词法分析实验文档格式.docx_第3页
第3页 / 共17页
编译原理词法分析实验文档格式.docx_第4页
第4页 / 共17页
编译原理词法分析实验文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

编译原理词法分析实验文档格式.docx

《编译原理词法分析实验文档格式.docx》由会员分享,可在线阅读,更多相关《编译原理词法分析实验文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

编译原理词法分析实验文档格式.docx

词法分析器的功能是输入源程序,输出单词符号。

词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)

①识别保留字:

if、int、else、for、while、do、return、break、continue;

单词种别码为1。

②其他的都识别为标识符,标识符由字母开头,后面可以是数字、字母和下划线;

单词种别码为2。

③常数为无符号整形数,无符号的整数由数字开头,后面只包含数字;

单词种别码为3。

④运算符包括:

+、-、*、/、=、>

、<

、>

=、<

>

单词种别码为4。

⑤分隔符(界符)包括:

、;

、{、}、(、);

单词种别码为5。

程序输入/输出示例:

如源程序为C语言。

输入如下一段:

main()

{

inta,b;

a=10;

b=a+20;

}

三.实验任务

要求输出如图:

实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)

一.实验步骤

1.建立一个对话框的C++工程,取工程名为zhaoying。

2.输入代码

3.执行代码

二.算法描述

#include<

stdio.h>

string.h>

stdlib.h>

structtest//保留字

charname[10];

intnum;

};

structoper//运算符与关系运算符

charname[4];

structcut//分隔符

charname[2];

//定义全局变量

structtesttest[9]={

{"

main"

1},{"

if"

2},{"

int"

3},{"

for"

4},{"

while"

5},{"

do"

6},{"

retuen"

7},{"

break"

8},{"

continue"

9}

};

structoperoper[11]={

+"

41},{"

-"

42},{"

*"

43},{"

/"

44},{"

="

45},{"

"

46},{"

<

47},{"

48},{"

49},{"

=="

50},{"

!

51}

structcutcut[6]={

"

61},{"

;

62},{"

{"

63},{"

}"

64},{"

("

65},{"

)"

66}

//包含的函数

voidmenu();

//菜单

voidscansource();

//查看源文件

voidrule();

//查看输出规则

voidanalyse();

//分析结果显示

voidexplain();

voidgetch(charch);

//读取为字母

voidgetnum(charch);

//读取为数字

voidgetspace(charch);

//读取制表符类

voidgetelse(charch);

//其他字符

charch;

charstr[10];

intk=0,i=0;

charsourcefile[20];

//源文件名

charobjectfile[20];

//目标文件名

FILE*fp;

FILE*hp;

intmain(intargc,char*argv[])

intchoice;

//显示菜单

menu();

printf("

输入进行词法分析的源文件名:

);

scanf("

%s"

sourcefile);

\n输入分析结果存入的文件名:

objectfile);

\n输入选项:

%d"

&

choice);

for(;

;

{

switch(choice)

{

case1:

scansource();

break;

case2:

rule();

case3:

analyse();

case4:

explain();

case5:

exit

(1);

}

printf("

\n\n"

menu();

输入选择项:

scanf("

}

return0;

voidmenu()

/-----------------------------------------------/\n"

词法分析器\n"

1.查看源文件:

\n"

2.符号种别码:

3.分析结果:

4.程序说明:

5.退出程序:

/------------------------------------------------/\n"

voidscansource()

FILE*fp;

charch;

if((fp=fopen(sourcefile,"

r"

))==NULL)

文件打开错误或源文件不存在!

\n"

exit

(1);

ch=fgetc(fp);

while(ch!

=EOF)

{

putchar(ch);

ch=fgetc(fp);

fclose(fp);

voidrule()

inti;

保留字及其对应种别码:

for(i=0;

i<

9;

i++)

(%s,%d)\t"

test[i].name,test[i].num);

运算符及其对应种别码:

11;

oper[i].name,oper[i].num);

分隔符及其对应种别码:

6;

cut[i].name,cut[i].num);

voidanalyse()

文件打开错误!

if((hp=fopen(objectfile,"

w"

do

if(((ch>

='

a'

)&

&

(ch<

z'

))||((ch>

A'

Z'

)))

getch(ch);

}

elseif((ch>

0'

9'

))

{//如果读取的是数字

getnum(ch);

elseif((ch=='

'

)||(ch=='

\r'

\n'

\t'

getspace(ch);

else//其他情况

getelse(ch);

k=0;

str[k]='

\0'

}while(ch!

=EOF);

//关闭文件

fclose(hp);

voidexplain()

printf("

\n提示:

本程序是一个进行标准C语言词法分析的程序,在本程序执行的开始,你会看到菜单\n"

为了是程序正确的运行,请按照提示进行正确的输入,比如:

输入错误的源文件名会导致\n"

程序因找不到源文件而出错,所以请输入正确的文件名并将源文件与本程序放在同一目录\n"

下,结果将会存入输入的目标文件中,如果目标文件不存在,程序将会自动建立同名文件\n"

可以再程序中或者查看目标文件浏览词法分析结果,谢谢您的使用!

voidgetch(charch)

{

for(;

str[k]=ch;

str[++k]='

if(!

(((ch>

))))

fseek(fp,-1L,1);

{if(strcmp(str,test[i].name)==0)//测试是否为保留字{printf("

(%d,0)\n"

test[i].num);

fprintf(hp,"

k=0;

break;

if(k!

=0)//否则为变量

{printf("

(20,%s)\n"

str);

fprintf(hp,"

(20,%s)\n"

voidgetnum(charch)

if(!

((ch>

)&

(ch<

)))

fseek(fp,-1L,1);

(30,%s)\n"

fprintf(hp,"

(30,%s)\n"

break;

voidgetspace(charch)

if(!

((ch=='

voidgetelse(charch)

switch(ch)

case'

'

:

(61,0)\n"

'

(62,0)\n"

{'

(63,0)\n"

}'

(64,0)\n"

('

(65,0)\n"

)'

(66,0)\n"

+'

(41,0)\n"

-'

(42,0)\n"

*'

(43,0)\n"

/'

(44,0)\n"

str[k]=ch;

str[++k]='

if(ch!

fseek(fp,-1L,1);

printf("

(45,0)\n"

elseif(ch=='

(50,0)\n"

(46,0)\n"

(48,0)\n"

(47,0)\n"

(49,0)\n"

(51,0)\n"

三.流程

四.结论

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1