资源简介
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
- 下一篇:拼图小游戏
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 南开大学编译原理课件及作业
- 华工往年编译原理试卷
- 编译原理课程设计for循环LR法三元式
- 哈工程-编译原理课程设计(2016级)
评论
共有 条评论