关于几类题型:
1.词法分析:文法--语言(正规集)--正规式--NFA--DFA的转换
1.1)DFA<-->正规式
1.2)语言L-->(正规式-->NFA)-->DFA
1.3)语言L(L对应集合 / L的某种描述)-->文法
对应的answer:
2.代码优化:根据基本块出口时的活跃变量,对四元序列优化and 画DAG图
3.中间代码生成:程序翻译成四元式序列
4.语法分析:
4.1)可规约串的识别:给定句型,求短语/直接短语/句柄(即最左直接短语)/素短语/最左素短语:
4.2)语法分析(自顶向下)--LL(1)文法的一系列题目:
4.2.1)消除文法左递归+回溯;
4.2.2)构造全体非终结符的FIRST,FOLLOW集合
4.2.3)构造预测分析表and LL(1)文法的判断
4.3)语法分析(自下向上)
4.3.1)firstvt,lastvt集合计算,构造算符优先关系表,算符优先文法判断
4.3.2)根据LR分析表对输入串作过程分析
5.一些小思考,抛砖引玉:
1)NFA->DFA确定化时,不列入空集会如何?
采用子集法中,每当出现未列入的集合时,就列入到第一列中作为一个状态。那么若出现空集,即便作为状态,走a弧还是b弧都是回到自己(空集),那去掉会怎么样?
2)文法二义性的问题
这个没有定式,只能说按经验总结。
2.1)几类文法已知是肯定无二义的:LL(1),LR(k),算符优先文法;所以通过判断是否满足对应文法的条件来判断(这是个充分不必要条件)
2.2)几类产生式,如对称形(有S->SaS,或S->SS),包括形(S->aSb|Sb 或S->aSb|aS);
2.3)普遍的说,对一个句型找到两颗不同的语法树即可(通常是判断其最左和最右推导这两颗)