导图社区 词法分析思维导图
这是一篇关于词法分析思维导图,包括:文件结构、全局变量、功能函数三部分内容。喜欢的小伙伴可以点个赞哦!
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
词法分析
文件结构
grammar3.txt
3型文法
Lexical_Analyzer.cpp
词法分析源程序
source_program.txt
待分析的program
test.txt
教材上NFA->DFA的测试样例,用于debug闭包那块函数的正确性
token_output.txt
输出的token三元组结果
全局变量
const int MAX_NODES = 100;
定义DFA里最大结点数量
ifstream input;
读入文件流(正规文法)
ofstream output;
输出文件流(token二元组)
set<char> weight;
读取正规文法的所有不重复的终结符(nfa边上权值),在create_NFA函数中初始化,在NFA_to_DFA()中调用
set<char> C[MAX_NODES];
C为DFA每一个子集里的结点,下标从0开始,用于debugNFA_to_DFA的正确性
vector<int> dfa_final_state;
dfa的终态,在NFA_to_DFA()中调用,遍历一遍DFA的所有状态子集,有Z的子集push_back进这个vector
int now_dfa_state;
token放入dfa中跑时,当前的dfa_state,在dfa_can_run_final()函数里会用到,判断一个token串能否跑到终态以判断其合法性
vector<string> token_result;
存放token的最终结果
const char keyword[][10]
关键字数组
struct Edge_NFA
NFA的边
struct NFA_node
NFA的结点
struct Edge_DFA
DFA的边
struct DFA_node
DFA的结点
功能函数
void init_NFA()
初始化NFA,加入终态结点Z
void create_NFA()
读取3型文法,创建一个NFA,由于三型文法是右线性,只需要添加与终态Z之间的边即可
void show_NFA_node()
debug时用于展示nfa结点
void show_NFA_edge()
debug时用于展示nfa的边
set<char> move(set<char> I, char a, NFA_node N)
集合移入函数,用于dfa求弧转闭包的时候状态移入集合的操作,对照清华大学教程上的算法原理实现
set<char> e_closure(set<char> I, NFA_node N)
求Epsilon状态闭包的函数,对照清华大学教材上算法原理实现
void NFA_to_DFA()
通过调用move和e_closure将NFA转化成DFA
void show_DFA_node()
debug用于检查dfa所有的结点
void show_DFA_edge()
debug用于检查dfa所有的边
bool token_can_run_final(string str)
将扫描进来的token放进dfa跑,看能不能到终态,能跑到终态的才能说明其是合法的token,否则就是错误的token
void scan()
读入源程序,并处理,输出token到token_output.txt