资源简介
一个简单的词法分析器,从文件中读入源程序,分析后的结果存入文件token.txt中。不完善的地方敬请指正。。谢谢
代码片段和文件信息
#include
#include
#include
#define MAX_CODE 1000
#define MAX_SYMBOL 32
int ijksignnumberflag;/*把类号内码等定义成全局变量*/
char ch;
int line;
char words[MAX_SYMBOL]={“ “};/*定义一个符号表*/
char program[MAX_CODE]; //用于保存源程序的字符数组
int scan(char program[]) /*扫描器*/
{ /*定义程序可以处理的关键字*/
char*keywords[]={“auto““break““case““char““const““continue“
“default““do““double““else“ “enum““extern““float““for“
“goto“ “if““int““long““register““return““short““signed“
“sizeof““static““struct““switch““typedef““union““unsigned“
“void“ “volatile““while“
};
number=0; flag=0; j=0; ch=program[i++];
/*处理空格与制表符回车*/
while((ch==‘ ‘)||(ch==‘\n‘)||(ch== ‘\t‘)||(ch==‘\r‘))
{
if(ch==‘\n‘)
line++;
ch=program[i++];
}
/*处理字母*/
if((ch>=‘a‘)&&(ch<=‘z‘)||(ch>=‘A‘)&&(ch<=‘Z‘)||ch==‘_‘)
{
while(((ch>=‘a‘)&&(ch<=‘z‘))||((ch>=‘A‘)&&(ch<=‘Z‘))||((ch>=‘0‘)&&(ch<=‘9‘))||ch==‘_‘)
{
words[j++]=ch;
ch=program[i++];
}
words[j++]=‘\0‘;
for(k=0;k<32;k++)
if(strcmp(wordskeywords[k])==0)
switch(k) //处理相应的字母并生成相应的类号或内码并加到符号表中
{
case 0:
sign=1;flag=1;break; //设置类号与内码的值在下面的程序中用
case 1:
sign=2;flag=1;break;
case 2:
sign=3;flag=1;break;
case 3:
sign=4;flag=1;break;
case 4:
sign=5;flag=1;break;
case 5:
sign=6;flag=1;break;
case 6:
sign=7;flag=1;break;
case 7:
sign=8;flag=1;break;
case 8:
sign=9;flag=1;break;
case 9:
sign=10;flag=1;break;
case 10:
sign=11;flag=1;break;
case 11:
sign=12;flag=1;break;
case 12:
sign=13;flag=1;break;
case 13:
sign=14;flag=1;break;
case 14:
sign=15;flag=1;break;
case 15:
sign=16;flag=1;break;
case 16:
sign=17;flag=1;break;
case 17:
sign=18;flag=1;break;
case 18:
sign=19;flag=1;break;
case 19:
sign=20;flag=1;break;
case 20:
sign=21;flag=1;break;
case 21:
sign=22;flag=1;break;
case 22:
sign=23;flag=1;break;
case 23:
sign=24;flag=1;break;
case 24:
sign=25;flag=1;break;
case 25:
sign=26;flag=1;break;
case 26:
sign=27;flag=1;break;
case 28:
sign=29;flag=1;break;
case 29:
sign=30;flag=1;break;
case 30:
sign=31;flag=1;break;
case 31:
sign=32;flag=1;break;
}
if (flag==0)
{
i--;sign=100;
}
}
/*处理常数*/
else if((ch>=‘0‘)&&(ch<=‘9‘))
{
number=0;
sign = -1;
while((ch>=‘0‘)&&(ch<=‘9‘))
{
number=number*10+(ch-‘0‘);
ch=program[i++]; //把识别出的常数并加到符号表中
}
if(((ch>=‘a‘)&&(ch<=‘z‘))||((ch>=‘A‘)&&(ch<=‘Z‘))||ch==‘_‘)
{
sign=-1;
do{ //酌情处理
ch=program[i++];
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9186 2008-03-12 21:46 词法分析器.cpp
文件 1571 2008-03-13 13:19 token.txt
文件 150 2008-03-12 21:01 a.txt
----------- --------- ---------- ----- ----
10907 3
- 上一篇:2017卜东波算法设计与分析考试试题
- 下一篇:智能家居控制系统-详细设计图文表并茂
相关资源
- SAMPLE语言词法分析器
- 无符号数的词法分析程序
- 词法分析器含代码及实验报告
- 编译原理实验----词法分析、分析预测
- 四川大学编译原理课程设计报告C-词法
- 编译原理,词法分析&语法分析及源代
- 赋值语句词法和语法分析程序
- 编译原理实验报告 词法分析器实验报
- 词法分析 设计
- 编译原理大作业 完整编译器
- 编译原理--词法分析器+语法分析器 源
- 编译原理实验报告,词法分析,语法
- 简单词法分析器,输出token和简单符号
- Sample语言词法分析器标准答案
- 词法分析实验报告含代码
- 编译原理 词法分析,语法分析,中间
- 词法分析+语法分析(附实验报告)
- Python 实现的 C 词法分析器
- Sample语言编译器(词法分析、正规式
- 编译原理词法分析实验报告内含截图
- 编译原理——词法分析代码
- 实验一 词法分析程序实现
- 编译原理语法分析和词法分析
- PL0(包括对其的扩充)
- 词法分析器和语法分析器
- 编写一个词法分析器,它针对输入文
- Lex词法分析实验
- 算符优先分析和词法分析器的设计与
- TINY+词法分析完全
- 编译原理--词法分析实验(含代码)
评论
共有 条评论