【面试准备】编译原理

  1. 编译的过程
    词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
    首先进行词法分析,将源程序处理为记号流,交由语法分析处理;语法分析识别各种语法成分并检查语法正确性,形成分析树;

  2. 编译程序和解释程序的区别
    翻译程序:将源程序处理转换为目标程序的程序,将一种程序设计语言翻译成等价的另外一种程序设计语言,比如C++等;
    解释程序:直接解释执行源程序的程序,不生成目标程序,同时处理源程序和数据,一边处理一边运行,比如Python。

  3. 错误处理
    词法分析:检测非法字符错误。
    语法分析:发现记号流不符合语法规则的错误。
    语义分析:检测具有正确语法结构,但对所涉及的操作无意义的结构。
    代码生成:发现目标程序区超出了允许范围的错误。

  4. 词法分析:把构成源程序的字符串转换为语义上关联的记号序列。
    作用:扫描源程序字符流、按照词法规则识别出各类单词符号、产生用于语法分析的记号序列、词法检查、创建符号表、跳过空白注释等

  5. 语法分析:编译程序的核心工作
    输入:记号流
    依据:源语言的语法规则
    功能:从源程序记号序列识别出各类语法成分、进行语法检查
    输出:分析树
    常用分析方法:自顶向下、自底向上

  6. 自顶向下方法
    递归调用分析法、非递归调用方法LL(1):要求不能有左递归
    LL(1)就是最左推导

  7. 自底向上分析法
    一般步骤:写出自动机、构造文法分析表、进行文法分析
    LR(k)分析法:自底向上分析法。LR(0)就是最右推导。
    简单的LR方法 SLR:在LR分析技术中能力最弱、最容易实现的一种方法。不存在移进-归约冲突
    规范的LR方法 LR(1):功能最强、代价最大。相对于SLR,用向前搜索符替代follow集
    向前看的LR方法 LALR:对同心集进行合并。
    SLR(1)只能用于存在移进-规约冲突和规约-规约冲突的文法中对应的FOLLOW集合交集为空。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值