資源簡介
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 人事管理系統源代碼+詳細設計文檔
評論
共有 條評論