资源简介
通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
代码片段和文件信息
#include
#include
char set[1000]; /*用于存放代码,以字符形式存放*/
char str[500]; /*用于存放预处理过的代码*/
char strtoken[20]; /*用于暂时存放字符串*/
char ch;
int srto;
typedef struct keytable /*放置关键字*/
{
char name[20];
int kind;
}KEYTABLE;
KEYTABLE keyword[]={ /*设置关键字*/
{“if“1}
{“int“1}
{“for“1}
{“while“1}
{“do“1}
{“return“1}
{“break“1}
{“continue“1}
{“default“2}
};
KEYTABLE arr1[10]={
{“+“4}
{“-“4}
{“*“4}
{“/“4}
{“=“4}
{“<“4}
{“>“4}
{“!“4}
};
KEYTABLE arr2[10]={
{““5}
{“;“5}
{“{“5}
{“}“5}
{“(“5}
{“)“5}
};
void openfile() /*打开文件*/
{
FILE *fp;
char filename[10];
int n=0;
printf(“请输入源文件名(包括路径和后缀名):“);
gets(filename);
if((fp=fopen(filename“r“))==NULL)
{
printf(“无法打开该文件!!!请确认该文件存在!\n“);
}
else
while(!feof(fp)) /*文件不结束,则循环*/
{
set[n]=getc(fp); /*文件的每一个字符都放入set[]数组中*/
n++;
}
fclose(fp); /*关闭文件*/
set[n-1]=‘\0‘;
printf(“\n-------------------Source Code--------------------------\n“);
puts(set);
printf(“\n--------------------------------------------------------\n“);
}
void prearrange() /*预处理程序,主要用于去除连续空格和换行符*/
{
int j=0;
sr=0; /*全局变量sr是str[]的指示器*/
while(set[j]!=‘\0‘)
{
if(set[j]==‘ ‘ || set[j]==‘\n‘)
{
while(set[j]==‘ ‘ || set[j]==‘\n‘) /*扫描到有连续的空格或换行符*/
j++;
str[sr]=‘ ‘; /*用一个空格代替扫描到的连续空格和换行符放入str[]*/
sr++;
}
else
{
str[sr]=set[j]; /*若当前字符不为空格或换行符就直接放入str[]*/
sr++;
j++;
}
}
str[sr]=‘\0‘;
}
void GetChar()
{
//do
//{
ch=str[sr++];
//}while(ch==‘ ‘);
}
void Concat()
{
strtoken[to]=ch;
to++; /*全局变量to是strtoken的指示器*/
strtoken[to]=‘\0‘;
}
void panduan(){//判断双运算符
if(ch==‘>‘){
GetChar();
if((ch==‘>‘)||(ch==‘=‘))
Concat();
else{ sr=sr-2;//回滚
GetChar();}
}else if(ch==‘<‘){
GetChar();
if((ch==‘<‘)||(ch==‘=‘))
Concat();
else{ sr=sr-2;
GetChar();}
}else if(ch==‘!‘){
GetChar();
if(ch==‘=‘)
Concat();
else{ sr=sr-2;
GetChar();}
}else if(ch==‘=‘){
GetChar();
if(ch==‘=‘)
Concat();
else{ sr=sr-2;
GetChar();}
}
}
int Reserve() /*对strtoken中的字符串查找保留字表,若是则返回它的编码,否则返回0*/
{
int ik=1;
for(i=0;i<=20;i++)
{
if(strcmp(strtokenkeyword[i].name)==0)
{
k=0;
return(keyword[i].kind);
}
}
if(k)
return 0;
}
int Reserve2()
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 74240 2011-05-11 00:06 编绎实验1报告.doc
文件 57344 2010-06-14 10:07 实验一 词法分析.doc
文件 4893 2011-05-10 22:50 my\my01.cpp
文件 3377 2011-05-10 18:54 my\my01.dsp
文件 516 2011-05-10 23:49 my\my01.dsw
文件 41984 2011-05-10 23:49 my\my01.ncb
文件 48640 2011-05-10 23:49 my\my01.opt
文件 736 2011-05-10 23:45 my\my01.plg
文件 180303 2011-05-10 23:45 my\Debug\my01.exe
文件 214212 2011-05-10 23:45 my\Debug\my01.ilk
文件 13851 2011-05-10 23:45 my\Debug\my01.obj
文件 217468 2011-05-10 19:23 my\Debug\my01.pch
文件 459776 2011-05-10 22:50 my\Debug\my01.pdb
文件 33792 2011-05-10 23:45 my\Debug\vc60.idb
文件 53248 2011-05-10 22:50 my\Debug\vc60.pdb
目录 0 2011-05-10 23:49 my\Debug
目录 0 2011-05-10 23:49 my
----------- --------- ---------- ----- ----
1404380 17
相关资源
- 北邮-编译原理-词法分析
- 词法分析器有去除注释功能
- 自定义词法规则的词法分析器
- C语言词法分析程序
- 简易词法分析器——基于C语言
- 词法分析C++源码
- 词法分析代码内有报告
- 编译原理词法分析实验
- 编译原理课程设计----语法分析器(
- 编译原理课程实验报告词法分析器及
- PL0编译器词法检查与语法分析器
- 编译原理课程设计词法语法分析器
- LEX实现一个C语言子集的词法分析器
- 编译原理词法分析器实验报告含源代
- 编译原理词法分析器C++版源代码
- 无符号数的词法分析程序 C++版
- LEX与YACC实现C语言词法分析和语法分析
- 编译原理 词法分析器
- 简易C语言编译器的设计与实现
- 编译原理综合性实验 选择部分C语言的
- 编译器前两步
- 实验一:词法分析程序c++
- PL/0语法分析程序
- 词法分析器(c语言实现)246881
- 编译原理 词法分析 源代码
- 词法分析C++程序
- 编译原理——词法分析器设计与实现
- 编译原理 C语言实现词法分析
- 不同进制数的识别程序设计
- 编制一个读单词过程,从输入的源程
评论
共有 条评论