资源简介
编译原理实验-词法分析<br>用C语言写的
代码片段和文件信息
#include “stdio.h“
#include“string.h“
#include “stdlib.h“
FILE *fp;
char filename[20];
char token[100];
int m=0;
char getch()
{
char ch;
ch=fgetc(fp);
return ch;
}
char getbc(char ch)
{
while(ch==‘ ‘) ch=getch();
return ch;
}
void concat(char ch)
{
token[m]=ch;
}
int letter(char ch)
{ if (ch>=‘A‘&&ch<=‘Z‘) return 1;
else if(ch>=‘a‘&&ch<=‘z‘) return 1;
else return 0;
}
int digit(char ch)
{
if(ch>=‘0‘&&ch<=‘9‘) return 1;
else return 0;
}
int reserve()
{ int g;
if( strcmp(token“begin“)==0) g=1;
else if( strcmp(token“end“)==0) g=2;
else if( strcmp(token“if“)==0) g=3;
else if( strcmp(token“then“)==0) g=4;
else if( strcmp(token“else“)==0) g=5;
else if( strcmp(token“while“)==0) g=6;
else if( strcmp(token“do“)==0) g=7;
else g=10;
return g;
}
void dtb()//十进制转换函数
{
int ij=0n=0a=0b[100];
n=0;
for(i=0;token[i]!=‘\0‘;i++)
{
a=a*10+((int)token[i]-48);
}
while(a!=0)
{
n=a%2;
b[j]=n;
j++;
a=a/2;
}
for(i=j-1;i>=0;i--)
printf(“%d“b[i]);
}
void scaner(char ch)
{ int c;
if(ch!=EOF)
{ ch=getbc(ch);
if(letter(ch))
{
while(letter(ch)||digit(ch))
{
concat(ch);
m++;
ch=getch();
}
c=reserve();
if(c!=10) printf(“%d %s\n“ctoken);
else printf(“10 %s\n“token);
}
else if(digit(ch))
{
while(digit(ch))
{
concat(ch);
m++;
ch=getch();
}
printf(“11 “);
dtb();
printf(“\n“);
}
else
switch(ch)
{
case‘+‘: printf(“13 +\n“);break;
case‘-‘: printf(“14 -\n“);break;
case‘*‘:printf(“15 *\n“);break;
case‘/‘:printf(“16 /\n“);break;
case‘<‘:ch=getch();
if(ch==‘=‘) printf(“17 <=\n“);
else if (ch==‘>‘) printf(“18 <>\n“);
else printf(“19 <\n“);
break;
case‘:‘:ch=getch();
if(ch==‘=‘) printf(“22 :=\n“);
else printf(“21 :\n“);
break;
case‘;‘: printf(“23 ;\n“); break;
default: printf(“error %c\n“ch);
break;
}
}
}
void main()
{char ch;int l;
printf(“input filename:“);
scanf(“%s“filename);
fp=fopen(filename“r+“);
do
{
for(l=m;l>=0;l--)
{
token[l]=‘\0‘;
}
m=0;
ch=fgetc(fp);
scaner(ch);
}while(ch!=EOF);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 64 2008-04-15 15:30 编译原理\a.txt
文件 2431 2008-04-15 15:28 编译原理\词法分析.cpp
目录 0 2008-04-15 22:36 编译原理
----------- --------- ---------- ----- ----
2495 3
相关资源
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 词法分析器有去除注释功能
- 自定义词法规则的词法分析器
- 简单函数绘图语言的解释器
- C语言词法分析程序
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析C++源码
- 词法分析代码内有报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- 编译原理 课程设计 DAG 报告+源码C++版
- 编译原理课程设计----语法分析器(
- 编译原理简单的编译器源码
评论
共有 条评论