资源简介
这是学习编译原理时候的大作业,做的是一个表达式的编译器。

代码片段和文件信息
#include
#include
#include
#include
#include“LL.h“
/*******************************************
判断一个字符是否在指定字符串中
********************************************/
unsigned IsInSet(char cchar *p)
{
unsigned i;
if(strlen(p)==0)
return(0);
for(i=0;;i++)
{
if(p[i]==c)
return(1); /*若在,返回1*/
if(i==strlen(p))
return(0); /*若不在,返回0*/
}
}
/*******************************************
得到一个不是非终结符的符号
********************************************/
char getch()
{
char c=‘A‘;
while(IsInSet(cvn)==1)
c++;
return(c);
}
/*******************************************
分解含有左递归的产生式
********************************************/
void left_recursion(char *point)
{ /*完整的产生式在point[]中*/
int m=0n=3k;
char temp[20]ch;
ch=getch(); /*得到一个非终结符*/
unsigned j;
k=strlen(vn);
vn[k]=ch;
vn[k+1]=‘\0‘;
for(j=0;j<=strlen(point)-1;j++)
{
if(point[n]==point[0])
{ /*如果‘|‘后的首符号和左部相同*/
for(j=n+1;j<=strlen(point)-1;j++)
{
while(point[j]!=‘|‘&&point[j]!=‘\0‘)
temp[m++]=point[j++];
left[count]=ch;
memcpy(right[count]tempm);
right[count][m]=ch;
right[count][m+1]=‘\0‘;
m=0;
count++;
if(point[j]==‘|‘)
{
n=j+1;
break;
}
}
}
else
{ /*如果‘|‘后的首符号和左部不同*/
left[count]=ch;
right[count][0]=‘@‘;
right[count][1]=‘\0‘;
count++;
for(j=n;j<=strlen(point)-1;j++)
{
if(point[j]!=‘|‘)
temp[m++]=point[j];
else
{
left[count]=point[0];
memcpy(right[count]tempm);
right[count][m]=ch;
right[count][m+1]=‘\0‘;
printf(“ count=%d “count);
m=0;
count++;
}
}
left[count]=point[0];
memcpy(right[count]tempm);
right[count][m]=ch;
right[count][m+1]=‘\0‘;
count++;
m=0;
}
}
}
/*******************************************
分解不含有左递归的产生式
********************************************/
void no_left_re(char *point)
{
int m=0;
unsigned j=0;
char temp[20];
for(j=3;j<=strlen(point)-1;j++)
{
if(point[j]!=‘|‘)
temp[m++]=point[j];
else
{
left[count]=point[0];
memcpy(right[count]tempm);
right[count][m]=‘\0‘;
m=0;
count++;
}
}
left[count]=point[0];
memcpy(right[count]tempm);
right[count][m]=‘\0‘;
count++;
m=0;
}
int OpenFile(char *filename char *vtchar *vnchar *leftchar right[50][50])
{
FILE *f;
if((f = fopen(filename “r“)) == NULL)
{
printf(“can not open %s\n“filename);
return 0;
}
char ch;
char ch2;
int count;
int i;
int j;
count = 0;
ch = fgetc(f);
while(!feof(f))
{
if (ch == ‘-‘)
{
if ( (ch2=fgetc(f)) == ‘>‘ )
{
count++; //累计产生式的字符数条数
}
else
{
fseek(f -1L 1);
}
}//if
else if( ch == ‘|‘ )
{
count++;
}//else if
els
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 19 2011-11-27 11:52 YCFC - 副本\1.txt
文件 11 2011-12-03 12:33 YCFC - 副本\2.txt
文件 11 2011-12-03 11:35 YCFC - 副本\3.txt
文件 67 2011-10-01 19:53 YCFC - 副本\a.txt
文件 41984 2011-12-22 16:53 YCFC - 副本\Debug\vc60.idb
文件 61440 2011-12-22 16:26 YCFC - 副本\Debug\vc60.pdb
文件 213096 2011-12-22 16:26 YCFC - 副本\Debug\YCFC.exe
文件 247180 2011-12-22 16:26 YCFC - 副本\Debug\YCFC.ilk
文件 284496 2011-12-22 16:26 YCFC - 副本\Debug\YCFC.pch
文件 435200 2011-12-22 16:26 YCFC - 副本\Debug\YCFC.pdb
文件 40606 2011-12-22 16:26 YCFC - 副本\Debug\ycfx.obj
文件 1136 2013-01-04 23:07 YCFC - 副本\LL.H
文件 4311 2011-12-05 16:43 YCFC - 副本\YCFC.dsp
文件 531 2011-11-26 20:38 YCFC - 副本\YCFC.dsw
文件 58368 2011-12-23 23:32 YCFC - 副本\YCFC.ncb
文件 48640 2011-12-23 23:32 YCFC - 副本\YCFC.opt
文件 242 2011-12-22 16:53 YCFC - 副本\YCFC.plg
文件 17989 2011-12-22 16:14 YCFC - 副本\ycfx.cpp
目录 0 2011-12-22 16:53 YCFC - 副本\Debug
目录 0 2011-12-23 23:32 YCFC - 副本
----------- --------- ---------- ----- ----
1455327 20
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 南开大学编译原理课件及作业
- 华工往年编译原理试卷
- 编译原理课程设计for循环LR法三元式
- 哈工程-编译原理课程设计(2016级)
评论
共有 条评论