• 大小: 405KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: 其他
  • 标签: 编译原理  YACC  LEX  

资源简介

自己做编译课程设计写的一个很简单的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


评论

共有 条评论