资源简介
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
相关资源
- Borland Socket Server程序 包含D6和D7源码
-
fli
nk核心源码(追源索骥:透过源码 - Scratch源码
- E4A无障碍跨程序操作类库(带源码、
- 设备管理系统源码
- 安卓wifi直连app源码
- 我的世界源码(易语言版)
- labview编程软件滤波器以及编写程序设
- 我的界面(visual foxpro)源码
- 易语言:一键cf基址源码
- The Secret Path 3D 3D魔方迷宫[源码][scra
- scratch垃圾分类源码(最终版本).sb
- 安卓QQ6.71协议源码易语言,qq协议源码
- 编译原理实验工具及参考源码(lex&
- E盾偷后台工具源码
- UNIX/LINUX编程实践教程的源码
- 十以内加减法练习 powerbuilder源码
- 农场开发项目
- OCR源码
- PLC上位机编程软件
- 用foobar2000听google音乐[更新一下]
- 学生信息管理系统源码
- 用VC 编写的仿QQ聊天室程序源代码
- 毕业论文之温度传感器DS18B20(源码
- 可自定义导航网站源码
- 栅栏填充算法源码(VC)
- msp430F149操作红外接收模块源码
- [免费]图像识别c 源码
- 周易排盘源码
- RSA算法源码
川公网安备 51152502000135号
评论
共有 条评论