资源简介
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 人事管理系统源代码+详细设计文
- 权限管理模块
- swing java gui图形插件
-
net.sf.json.JSONob
ject需要用到的6个ja - Android AudioRecord和MediaRecorder录音并实现
- java个人资产管理系统
- aspectjweaver-1.6.9.jar
- java编写的科学计算器
- Java DVD租赁系统.rar
- java 订单管理系统
- Java 网络版五子棋含源代码
- BouncyCastleProvider jar包
- Beginning Cryptography With Java 带源码
- 基于JavaEE的网上订餐系统
- 汽车销售系统java应用程序+SQL2000数据
- lucene4.0常用jar包
- httpclient需要的各种jar包
- JAVA做的学校教务管理系统
- 基于java坦克大战课程设计报告.doc
- J2EE销售管理系统(MVC)
- java+mysql+servlet图书管理系统
- 原生jdbc超市订单管理系统
- java电子商务系统(毕业论文+项目)
- 基于JAVA的聊天系统的设计与实现+毕业
- 用JSP、JavaBean做的宠物医院系统
- 学生管理系统——Servlet实现,代码和
- Android Socket调试助手教程及源码
- JAVA教材管理系统
- 完整图书管理系统J2EE
- JAVA版拼图游戏源代码
评论
共有 条评论