zoukankan      html  css  js  c++  java
  • 编译原理笔记 1

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

      • 词法分析(Lexical Analysis):识别词法记号(Token),基于正则文法(Regular Grammar)。工具读入正则表达式,输出有限自动机(Finite-state Automaton,FSA,or Finite Automaton)

        • 可手写规则(如 GNU 的 C 编译器)
        • 也可用词法分析器生成工具(如 Lex/Flex)
      • 语法分析 (Syntactic Analysis / Parsing):识别程序语法结构,构造抽象语法树(Abstract Syntax Tree)
        可以参考 JointJS 提供的可视化 JavaScript AST demo
        执行脚本语言的过程,就是遍历 AST 的过程(此处遍历通常是后序遍历,左->右->根)。
        AST 构造完成后,会标记一些属性,例如源代码的行号。

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

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

      • 生成目标代码
      • 对代码进行优化
  • 相关阅读:
    堆内存内部结构
    JVM 总体结构
    HTTP的工作原理
    HTTP协议简介
    服务器硬件资源_I/O
    maven常用命令行总结
    java enum—枚举的应用
    JAVA闰年的判断
    JAVA数据结构与算法——求最大公约数!!
    ThinkPHP 分页
  • 原文地址:https://www.cnblogs.com/cdyang/p/compiler-theory-note-1.html
Copyright © 2011-2022 走看看