资源简介
自己做编译课程设计写的一个很简单的C编译器,用的是LEX+YACC写的,方法比较新,由于时间的关系写的不是很完善,但是要扩充的话比较容易。压缩包中附LEX&YACC的语言详解,相信对于对编译有兴趣的人有些帮助。
代码片段和文件信息
#include “com.h“
Table table( Table tp int level)
{
int i;
Table newTemp = (Table) malloc( sizeof( struct table ) );
newTemp->previous = tp;
newTemp->level = level;
for( i = 0; i < HASHSIZE; i++ )
{
newTemp->buckets[i] = NULL;
}
if (tp)
newTemp->all = tp->all;
return newTemp;
}
struct symbol * install(char *name Table *tpp int level int sclass)
{
Table tp = *tpp;
struct entry *p;
int len;
unsigned h = name[0] & (HASHSIZE - 1);
if (level > 0 && tp->level < level)
tp = *tpp = table(tp level);
currentTable = tp;
p = (struct entry *) malloc( sizeof( struct entry ) );
len = strlen( name );
p->sym.name = (char *) malloc( len * sizeof( char ) );
strcpy( p->sym.name name );
p->sym.scope = level;
p->sym.up = tp->all;
p->sym.sclass = sclass;
tp->all = &p->sym;
p->link = tp->buckets[h];
tp->buckets[h] = p;
return &p->sym;
}
struct symbol * lookup(char *name Table tp) {
struct entry *p;
unsigned h = name[0] & (HASHSIZE-1);
if( tp == NULL ) return NULL;
do
for (p = tp->buckets[h]; p; p = p->link )
{
if ( p != NULL && strcmp(name p->sym.name) == 0 )
return &p->sym;
}
while ((tp = tp->previous) != NULL);
return NULL;
}
void enterscope() {
currentLevel++;
}
void exitscope() {
if (currentTable->level == currentLevel) {
Table tt = currentTable;
currentTable = currentTable->previous;
free( tt );
}
--currentLevel;
}
Symbol makeSym( char *text )
{
int len;
Symbol temp = (Symbol) malloc( sizeof( struct symbol ) );
len = strlen( text );
temp->name = (char *) malloc( len * sizeof( char ) );
strcpy( temp->name text );
temp->scope = currentLevel;
return temp;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 45540 2009-09-10 16:21 compile\c
文件 1782 2009-09-10 01:41 compile\com.c
文件 1976 2009-09-10 01:59 compile\com.h
文件 247 2009-09-10 01:33 compile\common.h
文件 303 2009-09-10 17:14 compile\hello.c
文件 763771 2009-09-09 09:45 compile\Lex&Yacc.pdf
文件 1410 2009-09-10 01:40 compile\lex.l
文件 50222 2009-09-10 16:20 compile\lex.yy.c
文件 63 2009-09-09 18:22 compile\new 2
文件 679 2009-09-19 12:32 compile\result.txt
文件 33877 2009-09-10 14:14 compile\syntax.y
文件 37101 2009-09-09 12:39 compile\syntax.y~
文件 100362 2009-09-10 16:20 compile\y.tab.c
文件 3078 2009-09-10 16:20 compile\y.tab.h
目录 0 2010-01-19 14:06 compile
----------- --------- ---------- ----- ----
1040411 15
- 上一篇:casa模型全部流程
- 下一篇:DMI修改及检测软件
相关资源
- 现代编译原理 虎书 课后习题答案
- 北航编译原理课程设计PL0文法代码及
- flexslider轮播实现源码
- 编译原理习题答案胡元义
- 编译原理DFA_NFA
- flash 飞机 空战 AS3.0 案例 demo
- 北京工业大学编译原理实验报告
- 程序设计语言编译原理课后习题答案
- 车辆路径问题 CVRP
- FlexCell .net control实现拖拽例程
- 陈火旺,编译原理第三版答案
- IBM Flex System配置以太网络模块图解
- 最新Flex4.16 SDK
- 编译原理 第二版 阿霍 课后答案[1-8章
- flex激活码工具
- CPLEX中文教程.zip - ZIP 压缩文件
- FLEXE1.1标准
- 编译原理中正规式转化为nfa
- 编译原理实验七:LL(1)文法的判断
- 编译原理实验四:正规式到正规文法
- 编译原理实验三:正规文法到正规式
- 程序设计语言编译原理课后习题答案
- flex的as3xls读写excel
- 编译原理-LL1文法的判定
- 东北大学软件学院编译原理
- 构造识别规范句型活前缀DFA的程序设
- CPLEX 8.0 Student Edition版 应用范例中文
- 计算机编译原理第三版张幸儿课后答
- Flex拓扑图组件-iolive
- 计算机编译原理文法压缩
评论
共有 条评论