资源简介
C 语言编译器源代码。包含了开发C语言编译器的全部源文件。
代码片段和文件信息
/****************************************************/
/* File: analyze.c */
/* Semantic analyzer implementation */
/* for the C_Minus compiler */
/****************************************************/
#include “globals.h“
#include “util.h“
#include “parse.h“
#include “symtab.h“
#include “analyze.h“
/* counter for variable memory locations */
static int location = 0;
/* current symble table */
static Symtab * pTable;
static FunEntry * pFun;
/* procedure traverse is a generic recursive
* syntax tree traversal routine:
* it applies preProc in preorder and postProc
* in postorder to tree pointed to by t
*/
static void traverse(TreeNode * t
void (* preProc) (TreeNode *)
void (* postProc) (TreeNode *))
{
if (t != NULL)
{
int i;
preProc(t);
for (i=0; i < MAXCHILDREN; i++)
traverse(t->child[i] preProc postProc);
postProc(t);
traverse(t->sibling preProc postProc);
}
}
/* nullProc is a do-nothing procedure to
* generate preorder-only or postorder-only
* traversals from traverse
*/
static void nullpreProc(TreeNode * t)
{
if (t == NULL) return;
else if (t->nodekind == Dec) {
switch (t->kind.dec)
{
case FunDefK:
pFun = Lookup_Fun(t->attr.name);
break;
case CompK:
pTable = t->attr.table;
break;
}
}
}
static void nullpostProc(TreeNode * t)
{
if (t == NULL || pTable == NULL) return;
else if (t->nodekind == Dec && t->kind.dec == CompK)
pTable = pTable->parent;
}
/* procedure insertNode inserts
* identifiers stored in t into
* the symbol table
*/
static void insertNode(TreeNode * t)
{
switch (t->nodekind)
{
case Dec:
switch (t->kind.dec)
{
case FunDecK:
if (Lookup_Fun(t->attr.name) == NULL)
Insert_Fun(t->attr.name t->type t->child[0]);
break;
case FunDefK:
if (Lookup_Fun(t->attr.name) == NULL)
pFun = Insert_Fun(t->attr.name t->type t->child[0]);
break;
case VarK:
{
ValEntry Entry;
TreeNode * child;
for (child = t->child[0]; child != NULL; child = child->sibling) {
if (child->nodekind == Exp && child->kind.exp == IdK) {
if (Lookup_Var(pTable pFun child->attr.name &Entry) != pTable->nestlevel)
if (child->child[0] == NULL)
Insert_Var(pTable child->attr.name t->type 1);
else
Insert_Var(pTable child->attr.name t->type child->child[0]->attr.val.i);
}
else if (child->nodekind == Stmt && child->kind.stmt == AssignK) {
if (Lookup_Var(pTable pFun child->child[0]->attr.name &Entry) != pTable->nestlevel)
if (child->child[0]->child[0] == NULL)
Insert_Var(pTable child->child[0]->attr.name t->type 1);
else
Insert_Var(pTable child->child[0]->attr.name t->type child->child[0]->child[0]->attr.val.i);
}
}
}
break;
case CompK:
pTable = Createtab(pTable pFun);
if (pTable==NULL)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2005-04-19 17:23 C编译器源代码\
目录 0 2004-11-14 14:58 C编译器源代码\341722881\
目录 0 2004-06-14 13:01 C编译器源代码\341722881\Debug\
文件 41984 2004-06-14 14:37 C编译器源代码\341722881\Debug\vc60.idb
文件 53248 2004-06-14 13:03 C编译器源代码\341722881\Debug\vc60.pdb
文件 25135 2004-06-14 13:03 C编译器源代码\341722881\Debug\util.obj
文件 13546 2004-06-14 13:03 C编译器源代码\341722881\Debug\symtab.obj
文件 12786 2004-06-14 13:03 C编译器源代码\341722881\Debug\scan.obj
文件 65831 2004-06-14 13:03 C编译器源代码\341722881\Debug\parse.obj
文件 60326 2004-06-14 13:03 C编译器源代码\341722881\Debug\CodeGen.obj
文件 7931 2004-06-14 13:03 C编译器源代码\341722881\Debug\C_Minus.obj
文件 15185 2004-06-14 13:03 C编译器源代码\341722881\Debug\analyze.obj
文件 299140 2004-06-14 13:03 C编译器源代码\341722881\Debug\C_Minus.ilk
文件 249956 2004-06-14 13:03 C编译器源代码\341722881\Debug\C_Minus.exe
文件 533504 2004-06-14 13:03 C编译器源代码\341722881\Debug\C_Minus.pdb
文件 7926 2003-06-23 02:15 C编译器源代码\341722881\analyze.c
文件 578 2003-06-23 00:15 C编译器源代码\341722881\analyze.h
文件 2027 2003-06-22 22:45 C编译器源代码\341722881\C_Minus.c
文件 5219 2003-06-22 20:27 C编译器源代码\341722881\C_Minus.dsp
文件 539 2003-06-22 20:16 C编译器源代码\341722881\C_Minus.dsw
文件 148480 2004-06-14 14:38 C编译器源代码\341722881\C_Minus.ncb
文件 51712 2004-06-14 14:38 C编译器源代码\341722881\C_Minus.opt
文件 248 2004-06-14 14:37 C编译器源代码\341722881\C_Minus.plg
文件 18369 2003-06-24 16:24 C编译器源代码\341722881\CodeGen.c
文件 1312 2003-06-23 00:16 C编译器源代码\341722881\CodeGen.h
文件 3413 2003-06-24 12:40 C编译器源代码\341722881\globals.h
文件 797 2003-06-14 01:33 C编译器源代码\341722881\Lex&Yacc.pgp
文件 268 2003-06-24 17:07 C编译器源代码\341722881\Lex&Yacc.pgw
文件 44677 2003-06-24 17:07 C编译器源代码\341722881\parse.c
文件 2052 2003-06-24 17:07 C编译器源代码\341722881\parse.h
文件 33176 2003-06-24 17:07 C编译器源代码\341722881\parse.v
............此处省略10个文件信息
评论
共有 条评论