c词法分析器实验报告
篇一:词法分析器设计实验报告
计算机与信息学院(信息工程系)
编译原理实验报告
专业班级
课程教学班任课教实验指导教师
实验地点
XX ~XX学年第一学期
实验一词法分析器设计
一、实验目的
通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。
二、实验内容
用 VC++/VB/JAVA 语言实现对 C 语言子集的源程序进行词法分析。
通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示;同时进行标识符登记符号表的管理。
以下是实现词法分析设计的主要工作:
(1)从源程序文件中读入字符。
(2 (3 (4(属性值——token 的机内表示)
(5)如果发现错误则报告出错 7
(6
三、实验流程图
四、实验步骤
1
2、编制好源程序后,设计若干用例对系统进行全面的上机测试,并通过所设计的词法分析程序;直至能够得到完全满意的结果。
3、书写实验报告;实验报告正文的内容:
五、实验结果
篇二:C语言词法分析器实验报告
计算机科学与工程系编译原理课程设计实验报告姓名:__ ******__ 学号_ *******__ 年级专业及班级___08计算机科学与技术成绩
- 1 -
- 2 -
- 3 -
- 4 -
- 5 -
篇三:词法分析器实验报告
实验报告
实验题目:词法分析器
院系班级:计科系0901班
姓名学号: XX210603
实验时间:XX-10-21
设计。
编制并调试一个词法分析程序,加深对词法分析原理的理解。
实验要求
设计出一个简单的词法分析程序,能够识别关键字(包含begin、if、end、 while、else、 then)、标识符、数字及数种符号(+、-、*、/、(、)、:、=、:=、#、>、、=、;)。
返回并打印各类字符所对应的种类编码及该字符所组成的二元组。
算法设计流程图
# include
# include
# include
# include
typedef struct
{
int num;
char *word;
}WORD;
char token[255]="";
char input[255];
int t=0;
int i=0;
char gjz[6][10]={"begin","if","then","while","do","end"} ;char ch;
WORD* start()
{
WORD*myword=new WORD;
myword->num=1;
myword->word="";
t=0;
ch=input[i];
i++;
while(ch==' '||ch==10)
{ ch=input[i];
i++;
}
if (isalpha(ch))
{
while(isalpha(ch)||isdigit(ch))
token[t]=ch;
t++;
token[t]='\0';
ch=input[i];
i++;
}
i--;
int n=0;
while(n {
if(!strcmp(token,gjz[n])) {
myword->num=n+1;myword->word=token;return myword; }
n++;
}//关键字
myword->num=10;
myword->word=token;
return(myword);
}//标识符
else if(isdigit(ch))
{
while (isdigit(ch))
token[t]=ch;
t++;
token[t]='\0';
ch=input[i];
i++;
}
i--;
myword->num=11;
myword->word=token;
return(myword)(本文来自:小草范文网:c词法分析器实验报告);
}//数字
else
switch(ch)
{
case'+':myword->num=13;myword->word="+";return(mywo rd);break; case'-':myword->num=14;myword->word="-";
return(myword);break; case'*':myword->num=15;myword->word="*";return(mywo rd);break;
case'/':myword->num=16;myword->word="/";return(mywo rd);break; case' i++;
if(ch=='>')
{
myword->num=21; myword->word=""; return(myword);} else if (ch=='='){
myword->num=22; myword->word=" i--;
myword->num=20;myword->word="':ch=input[i];
i++;
if(ch=='=')
{
myword->num=24; myword->word=">="; return(myword);}
i--;
myword->num=23;myword->word=">";return(myword);brea k; case':':ch=input[i];
i++;
if (ch=='=')
{
myword->num=18; myword->word=":="; return(myword);。