资源简介
编译原理 Pascal 编译器 C语言实现
编译原理 Pascal 编译器 C语言实现
编译原理 Pascal 编译器 C语言实现
编译原理 Pascal 编译器 C语言实现
编译原理 Pascal 编译器 C语言实现
代码片段和文件信息
// PL.cpp : Defines the entry point for the console application.
//
#include “common.h“
////////////////////////////////////////////////////////////
////////////////////////函数头定义如下//////////////////////
////////////////////////////////////////////////////////////
SYMLIST * listsAdd(SYMLIST * list1SYMLIST * list2);
SYMLIST * listAddSym(SYMLIST * listSYMBOL sym);
int SYMINLIST(SYMBOL symSYMLIST * list);
void COPYLIST(SYMLIST * list1SYMLIST * list2);
void error(int);
int nError;
void INITIAL();
void ENTERID();
void ENTERPREID();
void getSymbols(FILE *);
void getASymbol();
void destroySymbols();
SymbolItem *Symbols=NULL;
SymbolItem *CurSymbol=NULL;
void GEN(OPCOD funcint levelint address);
void WriteObjCode(char *);
void WriteCodeList(char *);
void ENTERARRAY(SYMLIST * listTYPES typeint lowint high);
void ENTERBLOCK();
void ENTER(object object);
int GETPOSITION(char * id);
void CONSTANT(SYMLIST * listCONSTREC & constRec);
void ARRAYTYP(SYMLIST * listint & arefint & arsz);
void TYP(SYMLIST * listTYPES & tpint & rfint & sz);
void PARAMENTERLIST(SYMLIST * list);
void CONSTDECLARATION(SYMLIST * list);
void TYPEDECLARATION(SYMLIST * list);
void VARDECLARATION(SYMLIST * list);
void PROCDECLARATION(SYMLIST * list);
void FACTOR(SYMLIST * listTYPEITEM & typeItem);
void TERM(SYMLIST * listTYPEITEM & typeItem);
void SIMPLEexpression(SYMLIST * listTYPEITEM & typeItem);
void expression(SYMLIST * listTYPEITEM & typeItem);
void ARRAYELEMENT(SYMLIST * listTYPEITEM & typeItem);
void ASSIGNMENT(SYMLIST * list);
void IFSTATEMENT(SYMLIST * list);
void WHILESTATEMENT(SYMLIST * list);
void COMPOUND(SYMLIST * list);
void STANDPROC(SYMLIST * listint i);
void CALL(SYMLIST * list);
void STATEMENT(SYMLIST * list);
void BLOCK(SYMLIST * listint level);
////////////////////////////////////////////////////////////
////////////////////函数过程定义如下////////////////////////
////////////////////////////////////////////////////////////
void GEN(OPCOD funcint levelint address) //将产生的代码保存到代码数组CODE里面
{ //并将代码索引CX增加 1
static int lineNumber=0;
if(CX>MAXNUMOFCODEADDRESS)
{
printf(“PROGRAM TOO LONG!“);
exit(0);
}
printf(“%d\t“lineNumber); //下面三个语句用来在编译的过程中显示代码
printf(ObjCodescript[func]leveladdress); //注意:现实的代码不是完全的,但是可以帮助理解
printf(“\n“);
CODE[CX].lineNumber=lineNumber++;
CODE[CX].func=func;
CODE[CX].level=level;
CODE[CX].address=address;
CX++;
}
void WriteObjCode(char *filename) //将产生的代码写进*.pld文件里面(二进制形式)
{
FILE *fcode;
fcode=fopen(filename“wb“);
if(!fcode)
error(40); //不能打开.pld文件
for(int i=0;i {
fwrite(&CODE[i].funcsizeof(OPCOD)1fcode);
fwrite(&CODE[i].levelsizeof(int)1fcode);
fwrite(&CODE[i].addresssizeof(int)1fcode);
}
fclose(fcode);
}
void WriteCodeList(char *filename) //将产生的代码写进*.lst文件(可见字符形式)
{
FILE *flist;
flist=fopen(filename“wb“);
if(!flist)
error(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-12-10 20:32 PL\
文件 5647 2010-12-10 16:42 PL\common.h
文件 48369 2010-12-10 19:41 PL\PL.cpp
文件 4045 2003-11-23 16:10 PL\pl.dsp
文件 529 2003-11-23 16:10 PL\PL.dsw
文件 9 2010-12-10 19:33 PL\pl.lab
文件 446 2010-12-10 19:33 PL\pl.lst
文件 58368 2010-12-10 19:44 PL\PL.ncb
文件 49664 2010-12-10 19:44 PL\PL.opt
文件 120 2010-12-10 19:33 PL\pl.pld
文件 1148 2010-12-10 19:41 PL\pl.plg
文件 78 2010-12-10 19:41 PL\pl.txt
- 上一篇:多峰函数多个最优解问题 演化算法
- 下一篇:简单电梯c++实现
相关资源
- 编译原理PL0实验报告
- 编译原理正则表达式转NFA转DFA DFA最小
- c编译器源代码
- 编译原理虎书课后习题解答
- 东北大学课程设计—编译原理课程设
- 编译原理-简单编译器课程设计C语言源
- matlab2016b配置VS2017编译器mexopts补丁文
- PL/0编译程序文本(C版本)
- 修改VB6的编译器C2.exe使它可以输出汇
- c 编译器 masm32 汇编 可自举
- 编译原理 压缩文法等价变换
- matlab2016b vs2017编译器补丁文件
- 编译原理 电梯程序
- 编译原理C++实现判断LL1文法
- 编译原理课程设计——目标代码生成
- 编译原理课程设计(PASCAL)
- pl/0编译器源码及文档
- 编译原理实验之四元式的生成源代码
- C++ 实现的 LISP 编译器
- Visual Studio 2017 编译器MSBuild Tools 离线
- 义隆单片机c语言编译器
- 北邮编译原理实验--词法分析
- asn1c ASN.1 编译器.zip
- 编译原理 PASCAL编译器
- 《c语言编译器源代码》
- 编译原理语法分析、词法分析源代码
- 编译原理之NULL集、first、follow集C语言
- 编译原理(龙书中英版)第二版 中文
- 编译原理-词语语法语义分析
- 编译原理LLLRSLR作业集锦
评论
共有 条评论