📜  带有示例的编译器阶段的工作

📅  最后修改于: 2021-08-27 16:53:52             🧑  作者: 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