📜  编译器阶段的工作示例

📅  最后修改于: 2021-09-27 22:41:11             🧑  作者: Mango

在本文中,我们将通过一个示例概述我们如何在每个编译器阶段单独工作。让我们一一讨论。

先决条件 – 编译器阶段简介

您将看到诸如词法分析器、语法分析器、语义分析器、中间代码生成器、代码优化器和目标代码生成等编译器阶段。让我们考虑一个例子。

x = a+b*50

下面给出了上述示例的符号表。在符号表中清楚地提到了变量名和变量类型。

S.No. Variable name Variable type
1 x float
2 a float
3 b float

现在,您将在这里看到如何在每个级别执行编译器阶段以及它是如何工作的。

  1. 词法分析器:

     在这个阶段,您将看到如何标记表达式。

    x  ->  Identifier-  (id, 1)
    =  ->  Operator  -  Assignment
    a  ->  Identifier-  (id, 2)
    +  ->  Operator  -  Binary Addition
    b  ->  Identifier-  (id, 3)
    *  ->  Operator  -  Multiplication
    50 ->  Constant  -  Integer

    现在,下面给出了最终的标记化表达式。

    (id, 1) = (id, 2) + (Id, 3)*50
  2. 语法分析器:

    在此阶段,您将看到如何在标记化表达式后检查语法。

    S -> Id = E
    E -> E+T | T
    T -> T*F | F
    F -> Id | Integer constant

    下面给出了上述表达式的 SDT。

  3. 语义分析器:
    在此阶段,您将看到如何检查语法树的类型和语义操作。下面给出的是语义分析器的图表。

  4. 中级代码生成器:
    在这个阶段作为输入,您将给出一个修改后的解析树,并在转换为中间代码后将生成 3 地址代码作为输出。下面给出的是上面修改的解析树的表达式。

    3 地址代码 –

    t1 = b * 50.0
    t2 = a+t1
    x = t2
  5. 代码优化器:
    在此阶段,您将看到输入将提供 3 个地址代码,而作为输出,您将看到优化代码。让我们看看它将如何转换。
    t1 = b* 50.0
    x = a+ t1
  6. 目标代码生成器:
    这是最后一个阶段,在此阶段,您将看到如何将最终表达式转换为汇编代码。所以,这对处理器来说很容易理解。
    Mul
    Add
    Store