实验一、词法分析实验
专业:商业软件工程 姓名:程嘉明 学号:201506110185
一、 实验目的
通过编写并上机调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将其分解后各类单词的词法分析方法。
二、 实验内容和要求
<程序>→PROGRAM <标识符>;<分程序>.
<分程序>→<变量说明>BEGIN<语句表>END
<变量说明>→VAR<变量表>:<类型>;| <空>
<变量表>→<变量表>,<变量> | <变量>
<类型>→INTEGER
<语句表>→<语句表>;<语句> | <语句>
<语句>→<赋值语句> | <条件语句> | <WHILE语句> | <复合语句> | <过程定义>
<赋值语句>→<变量>:=<算术表达式>
<条件语句>→IF<关系表达式>THEN<语句>ELSE<语句>
<WHILE语句>→WHILE<关系表达式>DO<语句>
<复合语句>→BEGIN<语句表>END
<过程定义>→PROCEDURE<标识符><参数表>;
BEGIN<语句表>END
设计并实现一个包含预处理功能的词法分析程序,加深对编译中词法分析过程的理解。
三、 实验方法、步骤及结果测试
- 源程序名:压缩包文件(rar或zip)中源程序名 ×××.c
可执行程序名:×××.exe
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Max 1000
int j=1;
long g=0;
char nchar[Max]={""};
int k=0;
char ch=NULL;
char m[30]={""};
int sym=-1;
main()
{
char zfc;
int n;
printf("请输入一串字符串:");
while((zfc=getchar())!='$')
{
nchar[g]=zfc;
g++;
}
do
{
n=getsym();
}while(n);
}
int getsym()
{
int i;
char a[2]={""};
char word[][15]={"begin","do","end","if","then","while"};
int wsym[6]={1,2,3,4,5,6};
int ssym[9]={25,26,27,28,0,13,14,15,16};
char b[9]={'=',';','(',')','#','+','-','*','/'};
if(j==1&&k<g)
{
ch=nchar[k];
j++;
k++;
}
while(ch==' '||ch==10||ch==9||ch==13)
{
if(k==g)
{
return 0;
}
ch=nchar[k];
k++;
}
- 原理分析及流程图
- 主要总体设计问题。
(包括存储结构,主要算法,关键函数的实现等)、
有很多地方的逻辑还是不能够明白不懂得如何下手,
- 主要程序段及其解释:
实现主要功能的程序段,重要的是程序的注释解释。
- 运行结果及分析
一般必须配运行结果截图,结果是否符合预期及其分析。
(截图需根据实际,截取有代表性的测试例子)
四、 实验总结
对词法分析还是比较生疏不熟练,很多时候无从下手,需要多多练习,理解一下书本的内容,看看别人项目的实现过程