编译原理课设(NEU)代码exe1.h
代码有几处bug,另外当时开发的时候心太急,理论基础没有做好,导致代码有不可逆性的缺陷:符号表,大家可以将符号表结构修改一下
代码是分为多个文章中存放的
VS 2017 VC++环境
代码是分为6个部分,在个人主页中都可以找到
编译以原理语言风格类似于C,允许递归函数,递归定义struct等,if,while语句也支持,但是没有多维数组,尽量模仿C语言,好像是可以生成最终的虚拟Intel汇编代码,本来有一个优化模块的,但是后来时间紧张,没有加进去
#pragma once
#include <iostream>
#include<map>
#include<string>
#include<stdlib.h>
#include<stdio.h>
#include<cstring>
#include<list>
#include <fstream>
#include<vector>
using namespace std;
class exe1
{
private:
map<string, string>Map_KT;
map<string, string>Map_PT;
int ktt = 1, chang = 1, ptt = 1, biao = 1;
list<string>daima;
list<string>leixing;
list<string>neibuma;
list<int>jiao;
void transfer(list<string> source);//将list转换为cextor
public:
vector<string> to_next_output;//传递给下一级 文法分析
list<string>const_number;//存储常量
exe1(string name);
~exe1();
map<string, string> init_KT(map<string, string> map_kt);
map<string, string> init_PT(map<string, string> map_pt);
int ch_to_code(char ch);
int state_next(int state, int ch_code);
int state_change(int state, char ch);
int Out_Token(int state_before, string out_token, int ch_code, char ch);
};