- parser:命令行语法解析器:构造函数中将.tm文件的内容删去行尾注释后、分类,初步转化为各类字符串,方便后续转化。
同时,还有一个report函数,负责输出help帮助或错误信息
class Parser
{
public:
string stringQ;
......
vector<string> stringDelta;
string stringInput;
bool verbose = false;
Parser(){};
Parser(int argc, char *argv[]);
string deleteAnnotation(string s);
void report(string info, Type code);
void checkQ(string s);
......
void checkDelta(string s);
};
- turingMachine:构造函数中创建一个解析器,再将解析器中的各个字符串转为图灵机的各个变量。
对于各条纸带,创建一个结构体,
struct Tape
{
int head = 0; // 读写头位置
int left = 0; // 左端位置
int right = 0; // 右端位置
map<int, char> tape; // 纸带下标与符号
Tape()
{
tape[0] = '_';
}
};
const string illegal = "_ ,;{}*";
const string direction = "lr*";
class TuringMachine
{
vector<string> Q; // 状态集 #Q
vector<char> S; // 输入符号集 #S
vector<char> G; // 纸带符号集 #G
string q0; // 初始状态 #q0
char B; // 空格符号 #B
vector<string> F; // 终结状态集 #F
int N; // 纸带数 #N
vector<transferFunc> delta; // 转移函数 delta
Parser *parser; // 解析器
bool verbose; // verbose模式
string input; // 输入
int step; // 当前步数
bool accept; // 接收状态
string state; // 当前状态
vector<Tape *> tapeset; // 纸带集合
public:
TuringMachine(){};
TuringMachine(int argc, char *argv[]);
void running();
void printTape();
string getSpace(int num);
bool symbolCompare(string cur, string old);
};