- 51
- 0
- 约1.67万字
- 约 90页
- 2020-04-13 发布于广东
- 举报
. * * * * * * * * * * * * * * * * U = {aa,bb} V={00,11} 则UV={aa00,aa11,bb00,bb11} V={0,1} V* = {ε,0,1,00,11,01,10,000,001,010,011…} V+ = {0,1,00,11,01,10,000,001,010,011…} * * * * * * * * * 编译方法不仅适用于编译程序,也广泛适用于其他系统软件和应用软件的开发。从根本上看,编译程序和其他应用程序一样,都可以归结为处理数据和表格,故可将它当作一个大型的应用实例。通过本课程学习,达到提高应用程序设计能力和解决实际问题能力的目的。 如词法分析中的字符串匹配技术可以应用于文本编辑程序、信息检索、通讯程序、模式识别中 上下文无关文法和语法制导的翻译可以用于分析表达式,写打字程序,绘图程序等小系统。 代码优化技术更可以用于自己的结构化程序中,用于改进性能、优化已有的程序等 * * (1)尽可能地掌握编译原理的思想,要站得高一点,不要一开始就紧紧盯在一些具体的算法上,尽可能理解算法的内部机制,而不是去机械地背下那些固定的算法,比如各种语法分析的方法。应该尽力理解为什么要这样做,逐渐在头脑中建立起编译器的整体概念,而不是零零散散的一些算法。 (2)要熟练掌握了相应的具体方法,无论怎么出题都应该能够套用。 (3)多做习题,千万不能觉得自己知道方法了,就不用做了。尤其对于编译这样的学科,题目的规模很大,步骤繁多,而且前面的步骤一旦出错,后面都错。如果不熟练掌握的话,考试的时候必定慌乱。 (4) 要扎扎实实地把重要算法记牢,同时配合大量的习题进行练习,达到拿到题目就可以动手做的地步。同时也会加深对编译原理进一步的理解。 (5) 同一问题可以用多种方法来求解(如词法分析有多种方式,语法分析也有多种方法),不同的方法适用于哪类文法,对文法的限制和要求,相应的表格的构造、使用等,各个方面的差异都要关注。 * * * * * * * * * * * * * * 统计信息,用于优化 * * * * * * * * * * * * * * * 算术表达式的文法定义 变量是表达式 表达式 + 表达式是表达式 表达式 * 表达式是表达式 (表达式) 是 表达式 E ? E + E E ? E * E E ? ( E ) E ? i E ? E+E | E*E | (E) | i 上下文无关文法产生句子的方法:从文法的开始符号出发,反复连续使用产生式,对左边的非终结符进行替换和展开 例:表达式定义规则 E ? E + E E ? E * E E ? ( E ) E ? i ( i+i ) E=( E ) =( E+E ) =( i+E ) =( i + i ) 推导: 连续使用产生式右部去替换左部某个非终结符的过程,得到的连续序列称为一个推导。 直接推导:又称一步推导(用 符号=表示),就是用某条规则的右部去替换该规则的左部 几个概念的形式定义 直接推导: 如果α?β是文法 G=(Vn,Vt,P,S)的产生式,γ和δ是V*中的任意符号,若有符号串v,w满足:v=γαδ,w=γβδ,则说v直接产生w,(w是v的直接推导)记作:v=w 例:S?01, 0S0=0010(直接推导γ=0,δ=0) 如果存在v=w0=w1=w2...=Wn=w(n0),则称v推导出w(长度为n),记作v=w(至少一步) 若有v=w或v=w,则记作v=w(0步或若干步) * + 例3 : G = ({E}, {i, +, *, (, ) } , P , E) (1.1) P: E ? E+E | E*E | (E) | i 表达式(i)和(i+i)*i的推导: E ? (E) ? (i)E ? E*E ? (E)*E ? (E + E)*E ? (i + E)*E ?(i + i)*E ? (i + i)*i E E 0步推导 E (i + i)*i 6步推导 E (i + i)*i 6步推导 E (E) 直接推导 句型:设G(s)是一文法,如果符号串x是从开始符号推导出来的,即有s=x,则称x是文法G(s)的一个句型。 即: 任何由开始符S推导出来的符号串都是句型。 句子:若x仅由终结符号组成,则称x为G(S)的句子 * 练习 文法G:S?aAcB | B
原创力文档

文档评论(0)