资源简介
这是学习编译原理时候的大作业,做的是一个表达式的编译器。
代码片段和文件信息
#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
相关资源
- 编译原理1题库完整版含答案
- Tiger语言语法手册
- 程序设计语言编译原理第三版课后习
- 编译原理课程设计 南京航空航天大学
- 编译原理算符优先文法实验源码
- 哈工大 编译原理作业
- 编译原理C-编译器源代码_min
- 编译原理.rar
- 南京理工大学编译原理复习题
- 编译原理课程设计:基于表达式的计
- 编译原理实验 求first集和follow集 代码
- 燕山大学软件工程编译原理实验报告
- 自动机向正规文法的转换
- 编译原理第三版课后习题及部分答案
- 程序设计语言与编译 语言的设计和实
- 计算机编译原理 张幸儿 第三版课后习
- 编译原理第三版试题及答案
- FirstVT集和LastVT集生成算法模拟编译原
- 编译原理:正规式判断字符串是否匹
- 四川大学计算机学院 C-语言编译器 编
- 《编译原理及实现》
- 编译原理课后答案蒋立源版
- 编译原理课堂笔记 史上最详细 最牛
- 陈火旺编译原理第三版课后习题答案
- DFA的最小化 完整可运行代码
- 正规文法转正规式+正规式NFA完整可运
- 编译原理课程设计C-语言编译器
- 现代编译原理虎书课后答案
- 编译原理讨论课PPTpl0编译器源程序讲
- 编译原理第四版课后习题答案电子工
评论
共有 条评论