• 大小: 1.29MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-20
  • 语言: Java
  • 标签: SNLC  c  java  编译器  

资源简介

SNLC包括了命令行c编译器 可视化java 编译器 源代码以及snl的例子 可以让做编译器实践的同学参考

资源截图

代码片段和文件信息

/****************************************************/
/* 文件 analyze.cpp    */
/* 说明 类PASCAL语言编译器语义分析程序   */
/* 主题 编译器结构:原理和实例 */
/****************************************************/

/***********  该文件所包含的头文件  ****************/

#include “globals.h“

#include “util.h“

#include “symbTable.h“

#include “scanner.h“

#include “parse.h“

#include “analyze.h“

#include “string.h“

/*scope栈的层数*/
int Level=-1;

/*在同层的变量偏移*/
int Off;

/*主程序的noff偏移*/
int mainOff;


SymbTable * scope[SCOPESIZE];   /*scope栈*/

TypeIR * intPtr = NULL; /*该指针一直指向整数类型的内部表示*/

TypeIR * charPtr = NULL; /*该指针一直指向字符类型的内部表示*/

TypeIR * boolPtr = NULL; /*该指针一直指向布尔类型的内部表示*/

static TypeIR * arrayVar(TreeNode * t);
/*该函数用于处理数组类型变量*/

static TypeIR * recordVar(TreeNode * t);
/*该函数用于处理记录类型变量*/

/***********************类型处理*****************************/



/*************************************************************/
/* 函数名  initialize                                        */
/* 功  能  该函数初始化整数类型,字符类型,布尔类型的内部表示*/
/* 说  明  由于这三种类型均为基本类型,内部表示固定。        */
/*************************************************************/
void initialize(void)
{
intPtr = NewTy(intTy);

charPtr = NewTy(charTy);

boolPtr = NewTy(boolTy);

    /*scope栈的各层指针设为空*/
for (int i=0;i scope[i] = NULL;
}

/************************************************************/
/* 函数名  TypeProcess                                      */
/* 功  能  该函数用来完成类型分析的工作                     */
/* 说  明  处理语法树的当前结点类型。构造出当前类型的内部表 */
/*         示,并将其地址返回给Ptr类型内部表示的地址.       */
/************************************************************/
TypeIR  * TypeProcess(TreeNode * tDecKind deckind)
{
TypeIR  *  Ptr = NULL;
switch (deckind)
{
case IdK:  
Ptr = nameType(t);break;         /*类型为自定义标识符*/
case ArrayK:
Ptr = arrayType(t);break;        /*类型为数组类型*/
case RecordK:
Ptr = recordType(t);break;       /*类型为记录类型*/
case IntegerK:
Ptr = intPtr;break;              /*类型为整数类型*/
case CharK:
Ptr = charPtr;break;             /*类型为字符类型*/
}
return Ptr;
}


/************************************************************/
/* 函数名  nameType                                         */
/* 功  能  该函数用来在符号表中寻找已定义的类型名字         */
/* 说  明  调用寻找表项地址函数FindEntry,返回找到的表项地址*/
/*    指针entry。如果present为FALSE,则发生无声明错误。*/
/*         如果符号表中的该标识符的属性信息不是类型,则非类 */
/*         型标识符。该函数返回指针指向符号表中的该标识符的 */
/*        类型内部表示。     */
/************************************************************/
TypeIR * nameType(TreeNode * t)
{
TypeIR * Ptr=NULL;
SymbTable * entry = NULL;
int present;


/*类型标识符也需要往前层查找*/
present = FindEntry(t->attr.type_name&entry);

if(present == TRUE)
{
/*检查该标识符是否为类型标识符*/
if(entry->attrIR.kind != typeKind)
ErrorPrompt(t->linenot->attr.type_name“used before typed!\n“);
else
Ptr = entry->attrIR.idtype;
}
else/*没有找到该标识符*/
{
ErrorPrompt(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     299067  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\final.exe

     文件      28959  2002-09-22 17:37  SNLC\snlc_command\命令行SNLC\源代码\analyze.cpp

     文件       1240  2002-09-12 20:10  SNLC\snlc_command\命令行SNLC\源代码\analyze.h

     文件      23006  2002-09-20 11:06  SNLC\snlc_command\命令行SNLC\源代码\cgen.cpp

     文件        714  2002-09-11 13:28  SNLC\snlc_command\命令行SNLC\源代码\cgen.h

     文件       5731  2002-09-11 13:28  SNLC\snlc_command\命令行SNLC\源代码\code.cpp

     文件       2794  2002-09-11 13:28  SNLC\snlc_command\命令行SNLC\源代码\code.h

     文件      23214  2002-09-22 17:06  SNLC\snlc_command\命令行SNLC\源代码\codegen.cpp

     文件        427  2002-09-12 16:09  SNLC\snlc_command\命令行SNLC\源代码\codegen.h

     文件       8938  2002-09-12 20:11  SNLC\snlc_command\命令行SNLC\源代码\consOpti.cpp

     文件        134  2002-09-12 16:10  SNLC\snlc_command\命令行SNLC\源代码\consOpti.h

     文件      37331  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\analyze.obj

     文件       4954  2008-09-21 15:09  SNLC\snlc_command\命令行SNLC\源代码\Debug\BuildLog.htm

     文件      37383  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\cgen.obj

     文件      11516  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\code.obj

     文件      44859  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\codegen.obj

     文件      15468  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\consOpti.obj

     文件      18962  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\ECCsaving.obj

     文件     299067  2003-03-28 09:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\final.exe

     文件       2048  2008-09-21 15:08  SNLC\snlc_command\命令行SNLC\源代码\Debug\final.exe.embed.manifest

     文件       2112  2008-09-21 15:08  SNLC\snlc_command\命令行SNLC\源代码\Debug\final.exe.embed.manifest.res

     文件     387732  2003-03-28 09:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\final.ilk

     文件     779264  2003-03-28 09:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\final.pdb

     文件      15580  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\loopOpti.obj

     文件      18522  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\main.obj

     文件      19774  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\midcode.obj

     文件      57646  2003-03-28 09:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\parse.obj

     文件      96965  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\parseLL1.obj

     文件      17509  2002-11-12 16:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\scanner.obj

     文件      24651  2003-03-28 09:53  SNLC\snlc_command\命令行SNLC\源代码\Debug\symbTable.obj

............此处省略360个文件信息

评论

共有 条评论