编译原理笔记 1

Posted CD Yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理笔记 1相关的知识,希望对你有一定的参考价值。

  • 前端:编译器对程序代码的分析和理解过程,跟语言的语法有关,跟目标机器无关

    • 词法分析(Lexical Analysis):识别词法记号(Token)

      • 可手写规则(如 GNU 的 C 编译器)
      • 也可用词法分析器生成工具(如 Lex/Flex),基于正则文法(Regular Grammar)。工具读入正则表达式,输出有限自动机(Finite-state Automaton,FSA,or Finite Automaton)
    • 语法分析 (Syntactic Analysis / Parsing):识别程序语法结构,构造抽象语法树(Abstract Syntax Tree)
      可以参考 JointJS 提供的可视化 javascript AST demo
      执行脚本语言的过程,就是遍历 AST 的过程(此处遍历通常是后序遍历,左->右->根)。
      AST 构造完成后,会标记一些属性,例如源代码的行号。

      • 如何构造 AST:
        • 手写递归下降算法(Recursive Descent Parsing)
        • 使用工具:Yacc、Antlr、JavaCC
    • 语义分析(Semantic Analysis):根据语义规则进行分析判断,上下文分析、消除歧义
      语义分析的部分结果,会标记在 AST 上,例如 int 等数据类型

  • 后端:生成目标代码,跟目标机器有关

    • 生成目标代码
    • 对代码进行优化

以上是关于编译原理笔记 1的主要内容,如果未能解决你的问题,请参考以下文章

编译原理学习笔记错误处理

编译原理笔记 2

编译原理学习笔记

编译原理学习笔记

编译原理学习笔记

编译原理学习笔记:(第一章:引论——1.1节)