Win32 Console下C++实现的PL/0语言编译程序
源代码在线查看: table.cpp
/*
FileName: table.cpp
Author: LiWen
Create: 2005-12-17
Last Modified: 2005-12-24
Discription: 符号表管理模块
*/
#include "compiler.h"
///////////////////////////////////////////////////////////////////////////////////
//符号表管理采取栈式结构,即每分析一层时,表内存储的是该层和其外层的符号
//信息,当分析完一层时,将此层的信息全部出栈,这要求在语法语义分析时,要
//按层载入符号表,且外先内后;而PL/0语言的特性,以及语法语义分析时采取的
//递归子程序调用法保证了这一点,故在表格管理中并未对载入顺序检测
//table表的开始从下标1开始,这是为了在查找时无效返回0;当然也可以返回-1,
//但为了和TMNT信号分开,此处如此解决
//
int tx; //符号表指针
extern char word[]; //词法分析中的当前表示符
extern int num; //词法分析中的当前数字值
TABLE table[MAXTX]; //符号表
/*=========================================================
函数:tableinit
参数:无
描述:符号表模块的初始化
返回:无
==========================================================*/
void tableinit(){
tx = 0;
}
/*=========================================================
函数:tableinsert
参数:当前层,词类型,偏移量指针(默认NULL,var !NULl)
描述:用于语法语义分析调用,负责将标识符记入符号表,记入的信息
包括 层数、类型、标识符名、地址(var)
返回:当前tx
==========================================================*/
int tableinsert(int lev,KIND kind,int *pdx/*=NULL for !var*/){
tx ++;
strcpy(table[tx].name,word);
table[tx].kind = kind;
switch(kind){
case cst:
table[tx].val = num;
break;
case var:
table[tx].lev = lev;
table[tx].addr = (*pdx)++;
break;
case proc:
table[tx].lev = lev;
break;
}
return tx;
}
/*=========================================================
函数:tablepop
参数:需要弹出的大小
描述:符号表出栈操作,当符号表某一层分析完毕,弹出该层符号
返回:当前tx
==========================================================*/
int tablepop(int num){
tx -= num;
return tx;
}
/*=========================================================
函数:tablesearch
参数:标识符名
描述:根据标识符名顺序查找其在表中位置,由于符号表的栈式管理
查找时采取自栈顶向底的方式,内层优先,解决了标识符的可
见性问题
返回:找到返回位置,否则0
==========================================================*/
int tablesearch(char *name){
for(int i=tx;i>0;i--){
if(strcmp(table[i].name,name)==0)
return i;
}
return 0;
}
|
相关资源 |
|
-
Win32 Console下C++实现的PL/0语言编译程序
-
C实现的PL/0编译器,该程序实现词法分析、语法分析及语义分析,以四元式为输出结果,是计算机专业的一门重要的实验课程。
-
pl0编译器,c语言环境下实现,PL/0语言编译程序采用以语法分析为核心、一遍扫描的编译方法。词法分析和代码生成作为独立的子程序供语法分析程序调用。程序供语法分析程序调用。
-
c语言实现的PL/0词法分析器
-
基于.Net环境下c#实现的国人自己的Blog平台,基于.Text的核心技术,但做了汉化以及改写了一部分的核心代码,值得研究学习
-
用delphi实现的PL/0的编译器
-
编译原理课程设计,用C写的PL/0编译器,有详细的文档和代码
-
本程序实现了PL/0语言的词法和语法分析程序,适合初学编译原理的同学使用。
|