资源简介
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.em
文件 2112 2008-09-21 15:08 SNLC\snlc_command\命令行SNLC\源代码\Debug\final.exe.em
文件 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个文件信息
- 上一篇:权限管理模块
- 下一篇:Java 人事管理系统源代码+详细设计文档
相关资源
- java串口通信全套完整代码-导入eclip
- android带百分比进度条的文件上传,使
- jsonarray所必需的6个jar包.rar
- 当当网完整项目、包括js、css、html
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- pc与android通过usb socket实现手机通信
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- commons-beanutils-1.8.3.jar
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- ehcache-core-2.5.1.jar
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- JSP,SQL,MVC的选课系统
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
评论
共有 条评论