资源简介
编译原理第一个实验,用C语言编写的词法分析器(附源文件)。输入一串字符,可以识别出关键字、运算符,标识符等。
代码片段和文件信息
#include
#include
#include
#include
#include
#define letter(a) str[a]>=‘A‘&&str[a]<=‘Z‘||str[a]>=‘a‘&&str[a]<=‘z‘
#define digit(a) str[a]>=‘0‘&&str[a]<=‘9‘
const int S=200;
void main()
{
char keyword[][5]={“DIM““IF““DO““STOP““END“};
char str[S]id[50]s[25];
int choicem=0n=0flag=0;
cout<<“请选择 :\n1.从文件中读取源程序\n2.通过键盘输入源程序\n“;
cin>>choice;
while(choice!=1&&choice!=2)
{
cout<<“\t\t警告 !输入不合法,重新新输入!\n“;
cin>>choice;
}
if(choice==1)
{
ifstream infile(“sourcefile.txt“);
if(!infile)
{
cout<<“打开失败!“;
abort();
}
infile.getline(strS‘#‘);
infile.close();
}
else
{
cin.get();
cout<<“请输入源程序,以“#”结束\n“;
cin.getline(strS‘#‘);
}
ofstream outfile(“objectfile.txt“ios::out);
if(!outfile)
{
cout<<“打开失败!“;
abort();
}
for(int i=0;str[i];i++)
{
if(str[i]==‘ ‘) ;
else if(str[i]==‘\n‘) ;
else if(letter(i))
{
id[m++]=str[i++];
while(letter(i)||digit(i))
id[m++]=str[i++];
id[m]=‘\0‘;
i--;
for(int l=0;l<5;l++)
if(!strcmp(idkeyword[l]))
{
cout<<“<$“<“< outfile<<“<$“<“< flag=1;
}
if(flag==0)
cout<<“<$ID“<“< outfile<<“<$ID“<“<
m=0;
flag=0;
}
else if(digit(i))
{
s[n++]=str[i++];
while(digit(i))
s[n++]=str[i++];
s[n]=‘\0‘;i--;
int a=0c[78]w=n-1;
char *p;
for(p=s;*p;p++w--)
a=a+(int)pow(10w)*(*p-48);
w=0;
while(a)
{
int b=a%2;
c[w++]=b;
a/=2;
}
cout<<“<$INT“;
outfile<<“<$INT“;
for(w=w-1;w>=0;w--)
{cout< cout<<“>\n“;
outfile<<“>\n“;
n=0;
}
else if(str[i]==‘=‘) {cout<<“<$ASSIGN->“<“< else if(str[i]==‘+‘) {cout<<“<$PLUS->“<“< else if(str[i]==‘*‘)
{
if(str[i+1]==‘*‘) {cout<<“<$POWER->“<“< else {cout<<“<$STAR->“<“< }
else if(str[i]==‘‘) {cout<<“<$COMMA->“<“< else if(str[i]==‘(‘) {cout<<“<$LPAR->“<“< else if(str[i]==‘)‘) {cout<<“<$RPAR->“<“< else {cout<<“ERROR!“< }
outfile.close();
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 50176 2010-11-16 21:23 词法分析器\Debug\vc60.idb
文件 61440 2010-10-02 16:44 词法分析器\Debug\vc60.pdb
文件 262195 2010-10-13 12:44 词法分析器\Debug\词法分析器.exe
文件 305940 2010-10-13 12:44 词法分析器\Debug\词法分析器.ilk
文件 18718 2010-10-13 12:44 词法分析器\Debug\词法分析器.obj
文件 302856 2010-10-02 15:46 词法分析器\Debug\词法分析器.pch
文件 590848 2010-10-02 16:44 词法分析器\Debug\词法分析器.pdb
文件 17 2010-11-16 21:24 词法分析器\ob
文件 61 2010-10-02 16:05 词法分析器\sourcefile.txt
文件 2516 2010-10-02 16:44 词法分析器\词法分析器.cpp
文件 3451 2010-10-02 16:37 词法分析器\词法分析器.dsp
文件 528 2010-10-02 16:44 词法分析器\词法分析器.dsw
文件 41984 2010-11-16 21:28 词法分析器\词法分析器.ncb
文件 48640 2010-11-16 21:28 词法分析器\词法分析器.opt
文件 254 2010-10-13 12:45 词法分析器\词法分析器.plg
目录 0 2010-10-03 21:55 词法分析器\Debug
目录 0 2010-11-16 21:28 词法分析器
----------- --------- ---------- ----- ----
1689624 17
- 上一篇:烟雾报警器完整版proteus可仿真
- 下一篇:录入保存学生多门课程的成绩进行分析
相关资源
- 编译原理实验报告+代码+使用说明
- 山东大学编译原理实验源代码c++版
- 词法分析器有去除注释功能
- 自定义词法规则的词法分析器
- 简易词法分析器——基于C语言
- 编译原理课程设计----语法分析器(
- 编译原理课程实验报告词法分析器及
- C-Minus编译器 编译原理实验
- TINY扩充语言的语法分析(实现 while、
- LEX实现一个C语言子集的词法分析器
- 编译原理词法分析器实验报告含源代
- 编译原理词法分析器C++版源代码
- 合工大编译原理实验报告
- 南邮编译原理实验
- PLO编译器的扩展编译原理课程实践
- 编译原理 词法分析器
- 编译原理实验语法分析器
- 词法分析器(c语言实现)246881
- 编译原理——词法分析器设计与实现
- 编译原理课程设计+报告用高级语言
- 编译原理实验报告+语法分析代码C语言
- c++词法分析器
- 编译原理词法分析器 输入源程序 能生
- 编译原理实验报告 语法分析 语义分
- C MINUS 词法分析器
- 编译原理_词法分析器_C语言版_简单易
- WinForm程序C++词法分析器
- 编译原理词法分析器实验报告
- 编译原理实验-词法分析器
- 编译原理实验一词法分析 实验二语法
评论
共有 条评论