• 大小: 10.22MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-10
  • 语言: 其他
  • 标签: 编译原理  

资源简介

PL/0 词法分析、语法分析、语义分析与中间代码生成、解释执行
最终结果输出目标代码、符号表、解释执行结果

资源截图

代码片段和文件信息

#include
#include
#include



#define num_word 13       //关键字个数 
#define num_tab 100     // 符号表容量 
#define num_bit 14       // 数字的最大位数 
#define al 10         // 标识符的最大长度  
#define num_err 30    
#define amax 2048     // 地址上界
#define levmax 3      // 最多只允许3层嵌套
#define cxmax 200     // 最多的虚拟机代码数
#define num_ssize 500 //运行时数据栈元素最多为500个 

 
enum SYM {
SYMUNUSE//0不设保留字
SYMIDENTIFIER SYMNUM
SYMPLUS SYMMINUSSYMMUL SYMDIV //+ - * /
SYMODD 
SYMEQL //=
SYMNEQ//!=
SYMLSS // <
SYMLEQ //<=
SYMBIG // >
SYMBIGEQ // >=
SYMLEFT // (
SYMRIGHT // )
SYMCOM // 
SYMSEM // ;分号
SYMPOT // .
SYMASSI // :=
SYMBEGIN SYMEND SYMIF SYMTHEN SYMWHILE
SYMWRITE SYMREAD SYMDO SYMCALL SYMCONST
SYMVAR SYMPROCEDURE
};
#define symnum 32


enum object {
constant
variable
procedure
};


enum fct {
LIT OPR LOD
STO CAL INT
JMP JPC
};
#define fctnum 8


struct instruction
{
enum fct f; 
int l;
int a;     
};

//int stacktop;
bool listswitch;    
bool tableswitch;  
char ch;   
enum SYM sym; 
char id[al + 1];      // 当前SYMIDENTIFIER,多出的一个字节用于存放0 
int num;            //当前SYMNUM 
int chadr ll;         // getch使用的计数器,chadr表示当前字符(ch)的位置 
int cx;             // 虚拟机代码指针 取值范围[0 cxmax-1]
char line[81];      // 读取行缓冲区 
char a[al + 1];       // 临时符号,多出的一个字节用于存放0 
struct instruction code[cxmax]; //存放虚拟机代码的数组 
char word[num_word][al];        //保留字 
enum SYM wsym[num_word];     //保留字对应的符号值 
enum SYM ssym[256];      //单字符的符号值 
char mnemonic[fctnum][5];   //虚拟机代码指令名称 
bool declbegsys[symnum];    // 表示声明开始的符号集合 
bool statbegsys[symnum];    // 表示语句开始的符号集合 
bool facbegsys[symnum];     // 表示因子开始的符号集合 

//符号表
struct TABLE
{
char name[al];    
enum object kind;
int val;            
int level;          
int adr;            
int size;          
};

struct TABLE table[num_tab]; // 符号表 

FILE* fin;
char fname[al];
int err;        //错误计数

void error(int n);
void GETSYM();
void getch();
void init();
void GEN(enum fct x int y int z);
void test(bool* s1 bool* s2 int n);
int inset(int e bool* s);
int addset(bool* sr bool* s1 bool* s2 int n);
int subset(bool* sr bool* s1 bool* s2 int n);
int mulset(bool* sr bool* s1 bool* s2 int n);
int BLOCK(int lev int tx bool* fsys);
void exec();
void factor(bool* fsys int* ptx int lev);
void term(bool* fsys int* ptx int lev);
void condition(bool* fsys int* ptx int lev);
void expression(bool* fsys int* ptx int lev);
void statement(bool* fsys int* ptx int lev);
void listcode(int cx0);
void printcode();
void vardeclaration(int* ptx int lev int* pdx);
void constdeclaration(int* ptx int lev int* pdx);
int position(char* idt int tx);
void enter(enum object k int* ptx int lev int* pdx);
int whereb(int l int* s int b);


void init()
{
int i;

/* 设置单字符符号 */
for (i = 0; i <= 255; i++)
{
ssym[i] = SYMUNUSE;
}
s

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-12-18 11:58  final\
     目录           0  2019-12-08 23:43  final\.vs\
     目录           0  2019-12-08 23:43  final\.vs\final\
     目录           0  2019-12-18 10:22  final\.vs\final\v16\
     文件       41984  2019-12-18 11:58  final\.vs\final\v16\.suo
     文件     5750784  2019-12-18 11:58  final\.vs\final\v16\Browse.VC.db
     目录           0  2019-12-08 23:43  final\.vs\final\v16\ipch\
     目录           0  2019-12-11 13:59  final\.vs\final\v16\ipch\AutoPCH\
     目录           0  2019-12-10 14:00  final\.vs\final\v16\ipch\AutoPCH\83aad7005a654c2b\
     文件    31719424  2019-12-10 14:00  final\.vs\final\v16\ipch\AutoPCH\83aad7005a654c2b\FINAL.ipch
     目录           0  2019-12-10 12:32  final\.vs\final\v16\ipch\AutoPCH\8c6080a761c5afa0\
     文件     3801088  2019-12-10 12:32  final\.vs\final\v16\ipch\AutoPCH\8c6080a761c5afa0\FINAL.ipch
     目录           0  2019-12-10 13:04  final\.vs\final\v16\ipch\AutoPCH\c3613f418180513b\
     文件     3604480  2019-12-10 13:57  final\.vs\final\v16\ipch\AutoPCH\c3613f418180513b\FINAL.ipch
     目录           0  2019-12-12 13:53  final\.vs\final\v16\ipch\AutoPCH\dcb3fbd016563d50\
     文件     3604480  2019-12-18 10:22  final\.vs\final\v16\ipch\AutoPCH\dcb3fbd016563d50\FINAL.ipch
     目录           0  2019-12-17 19:24  final\Debug\
     文件       57856  2019-12-17 19:24  final\Debug\final.exe
     文件      781800  2019-12-17 19:24  final\Debug\final.ilk
     文件         567  2019-12-17 19:24  final\Debug\final.log
     文件       64445  2019-12-17 19:24  final\Debug\final.obj
     文件       64421  2019-12-11 15:16  final\Debug\final.obj.enc
     文件      733184  2019-12-17 19:24  final\Debug\final.pdb
     目录           0  2019-12-17 19:24  final\Debug\final.tlog\
     文件         750  2019-12-17 19:24  final\Debug\final.tlog\CL.command.1.tlog
     文件        4044  2019-12-17 19:24  final\Debug\final.tlog\CL.read.1.tlog
     文件         384  2019-12-17 19:24  final\Debug\final.tlog\CL.write.1.tlog
     文件         199  2019-12-17 19:24  final\Debug\final.tlog\final.lastbuildstate
     文件        1108  2019-12-17 19:24  final\Debug\final.tlog\link.command.1.tlog
     文件        3230  2019-12-17 19:24  final\Debug\final.tlog\link.read.1.tlog
     文件         396  2019-12-17 19:24  final\Debug\final.tlog\link.write.1.tlog
............此处省略28个文件信息

评论

共有 条评论