Introduction

时间:2021-08-05
本文章向大家介绍Introduction,主要包括Introduction使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
  • 编译器是软件,将源程序编译成目标程序,学习编译原理有助于理解程序内部如何执行,设计出更高效的程序,同时也有助于调试代码,分析错误原因。

  • 源代码经过词义分析,语法分析生成语法树,再经过翻译生成中间代码,编译器会优化,然后再生成目标代码。这一步工作就是编译。

  • Compiler vs Interpreter

    Compiler 将源程序转为目标程序,并输出错误调试信息,转换过程是对所有的代码进行转换并做优化。编译执行的代码更快。

    Interpreter也是将源程序转为目标程序,但不同的是,转换过程是一句一句的转换并且没有做优化。动态执行易于调试,可移植性好。

  • Phases of Compiler

    主要分为两个阶段,分别是分析阶段和代码生成阶段。

    分析阶段:Source program \(\rightarrow\) Lexical analyzer \(\rightarrow\) Syntax analyzer \(\rightarrow\) Semantic analyzer \(\rightarrow\)

    代码生成阶段: Intermediate code generator \(\rightarrow\) Code optimizer \(\rightarrow\) Code generator \(\rightarrow\) Target program

  • 编译过程小例子:position := initial + rate * 60;

    1. Lexical analysis (词义分析

      • keywords:关键词
      • Identifier: position, initial, rate(标识符)
      • operator::=, +, *
      • Constant: 60
      • Separators:空格符,tab键,换行符
      • Delimiters:(),:;=>;>>
    2. Syntax analysis (语法分析

      生成语法树,个人感觉有点像中缀表达式对应的树

    3. Semantic analysis (语义分析

      分析检查程序中的每个操作是否实际可执行,比如运算符的两个操作数的类型是否一致(可做类型转换),if是否有else与其匹配(报错误信息,调试信息)etc...

    4. Intermediate code generator

      生成三地址码(最多三个地址),可以看出和机器指令很接近。

    5. 大致过程如下:

  • Compiler-Construction Tools:

    1. Scanner generator: Lex(生成词法分析器的工具,输入是描述词法分析器的文件,输出经过编译生成词法分析器)

    2. Parser generator: Yacc(生成语法分析器的工具,同上)

    3. Syntax-directed translation engines

    4. Automatic code generators

    5. Data-flow engines

原文地址:https://www.cnblogs.com/Ivessas/p/15102765.html