资源简介
c0是一个简化版的c源码编译器,符合大多数学校的编译原理课程需要,可扩充。
代码片段和文件信息
#include“lexical.h“
/*
*打开源代码文件
*/
bool Lexical::openSourceFile()
{
cout<<“请输入要打开的文件的名字:“< cin>>fName;
fin=fopen(fName“r“); //返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中
if(NULL!=fin)
{
return true;
}
else
{
return false;
}
}
int Lexical::getChar()
{
if(cc==ll)
{
if(feof(fin))
{
// printf(“program incomplete“);
endOfFileFlag=true;
return -1;
}
ll=0;
cc=0;
ch=‘ ‘;
while(10!=ch)
{
if(EOF==fscanf(fin“%c“&ch))
{
line[ll]=0;
break;
}
printf(“%c“ch);
line[ll]=ch;
ll++;
}
}
ch=line[cc];
cc++;
return 0;
}
int Lexical::getSym()
{
int ijk;
while(ch==‘ ‘||ch==10||ch==9) //忽略空格、换行、TAB
{
if(-1==getChar())
{
return -1;
}
}
if(ch>=‘a‘&&ch<=‘z‘ || ch>=‘A‘ && ch<=‘Z‘)
{
k=0;
do{
if(k {
a[k]=ch;
k++;
}
if(-1==getChar())
{
return -1;
}
}while(ch>=‘a‘&&ch<=‘z‘|| ch>=‘A‘ && ch<=‘Z‘||ch>=‘0‘&&ch<=‘9‘);
a[k]=0;
strcpy(ida);
i=0;
j=norw-1;
do{
k=(i+j)/2;
if(strcmp(idword[k])<=0)
{
j=k-1;
}
if(strcmp(idword[k])>=0)
{
i=k+1;
}
}while(i<=j);
if(i-1>j)
{
sym=wsym[k];
}
else
{
sym=ident;
}
}
else
{
if(ch>=‘0‘&&ch<=‘9‘)
{
k=0;
num=0;
sym=number;
do{
num=10*num+ch-‘0‘;
k++;
if(-1==getChar())
{
return -1;
}
}while(ch>=‘0‘&&ch<=‘9‘); /*获取数字的值*/
k--;
if(k>nmax)
{
printf(“数字的值超出上限!\n“);
}
}
else
{
if(ch==‘=‘) /*检测赋值符号*/
{
sym=becomes;
if(-1==getChar())
{
return -1;
}
}
else
{
if(ch==‘(‘) /*检测到左括号*/
{
sym=lparen;
if(-1==getChar())
{
return -1;
}
}
else
{
if(ch==‘)‘) /*检测到右括号*/
{
sym=rparen;
if(-1==getChar())
{
return -1;
}
}
else
{
if(ch==‘{‘) /*检测到左大括号*/
{
sym=lbraces;
if(-1==getChar())
{
return -1;
}
}
else
{
if(ch==‘}‘) /*检测到右大括号*/
{
sym=rbraces;
if(-1==getChar())
{
return -1;
}
}
else
{
/* 当符号不满足上述条件时,全部按照单字符号处理*/
sym=ssym[ch];
if(!endOfFileFlag)
{
if(-1==getChar())
{
return -1;
}
}
}
}
}
}
}
}
}
return 0;
}
/*
*判断变量定义和自定义函数定义,回退时使用
*/
void Lexical::rollBack()
{
cc--;
ch=line[cc-1];
sym=ident;
}
/*
*返回当前行缓冲
*/
char * Lexical::getLine()
{
return line;
}
/*
*返回当前字符的位置
*/
int Lexical::getCc()
{
return cc;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3033 2015-12-20 21:41 c0源码\c0_compiler\lexical.cpp
文件 480 2015-12-13 11:15 c0源码\c0_compiler\lexical.h
文件 3854 2015-12-13 11:19 c0源码\c0_compiler\main.cpp
文件 2258 2015-12-13 11:19 c0源码\c0_compiler\main.h
文件 1585 2015-12-14 17:15 c0源码\c0_compiler\ob
文件 537 2015-12-14 17:14 c0源码\c0_compiler\ob
文件 20875 2015-12-21 17:33 c0源码\c0_compiler\syntsemant.cpp
文件 847 2015-12-13 11:20 c0源码\c0_compiler\syntsemant.h
文件 2088 2015-12-14 17:01 c0源码\c0_compiler\tabulation.cpp
文件 872 2015-12-13 10:25 c0源码\c0_compiler\tabulation.h
文件 303 2015-12-19 20:21 c0源码\c0_interpret\c0_interpret.cpp
文件 4557 2015-12-19 23:18 c0源码\c0_interpret\c0_interpret.h
目录 0 2015-12-30 13:01 c0源码\c0_compiler
目录 0 2015-12-30 13:01 c0源码\c0_interpret
目录 0 2016-04-03 15:16 c0源码
----------- --------- ---------- ----- ----
41289 15
- 上一篇:铣削加工
- 下一篇:air720.zip
相关资源
- 网易新闻apicloud源码
- vfp个人通讯簿管理系统程序源码及论
- VHDL-简单交通灯设计-源码
- 基于TCP协议的客户端demo,内涵服务端
- VS2013三菱PLC通讯源码
- VC控制Excel的示范源码--不错的选择
- cy68013A USB高速数据采集的FPGA程序源码
- 40种网页布局源代码
- H5西游大圣轮回源码网盘.txt
- 打地鼠,安卓源码小游戏
- Labview串口全功能支持 带VI源码
- 小型CA系统的DLL源码
- 基于MSP430的FFT算法源码
- 最新12月6日更新 千月影视APP双端源码
- TypeConverter源码实现
- Layui选项卡切换及右键操作(新增、多
- H5购物网站项目
- 计算机使用痕迹深度检查擦除工具源
- 用delphi实现远程控制源码
- CVI波形发生器源码
- 易语言编程软件源码-网络文件传输
- DELPHI 控制摄像头拍照,截取任意矩形
- SpringBoot文件上传源码
- Web版学生作业上传系统(源码)
- aes verilog源码
- 小米电信自注册APK源码
- ec11驱动源码
- Hbulider蓝牙连接打印机源码
- MT4 多指标共振
- HMC833锁相环750M~6GHz自动配置Verilog源码
评论
共有 条评论