资源简介
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\li
文件 3230 2019-12-17 19:24 final\Debug\final.tlog\li
文件 396 2019-12-17 19:24 final\Debug\final.tlog\li
............此处省略28个文件信息
- 上一篇:毕业设计智能小车的制作蓝牙控制,避障,循迹.rar
- 下一篇:拼图小游戏
相关资源
- 编译原理课件和每章作业答案
- 四川大学软件学院《编译原理》近三
- 西安电子科技大学编译原理考试题2
- 编译原理 (第二版) 张素琴
- 编译原理简单赋值语句的语法分析程
- 编译原理实验TINY+编译器
- 编译原理课后答案清华大学出版社
- 编译原理语法分析器课程设计
- 编译原理——for循环语句的翻译,L
- 清华《编译原理》课后习题答案
- 编译原理 清华ppt 课件
- 编译原理及实现技术 第二版 刘磊等编
- 词法分析器Lex(编译原理)
- 编译原理学习指导与习题解析
- 四川大学编译原理2011-2015期末考题
- 编译原理课程辅导+清华大学计算机系
- 北京邮电大学编译原理期末试卷
- 编译原理 for 条件语句,while 语句的翻
- 广工编译原理的复习资料试卷等
- 华工编译原理复习资料
- 杭电编译原理语法分析器
- 编译原理答案第二版 刘坚 编著
- 华工编译原理实验词法分析+语法分析
- 编译原理课件及实验源代码实验报告
- 东南大学编译原理实验 lex&&yacc
- 北方工业大学编译原理话语法分析实
- 东华大学 姚砺 编译原理作业答案
- 编译原理语法分析器课程设计完美版
- 简单的PL0编译器
- First集和Follow集生成算法模拟
评论
共有 条评论