📜  编译器设计中的语法分析简介

📅  最后修改于: 2021-06-28 07:25:45             🧑  作者: Mango

当将输入字符串(源代码或某种语言的程序)提供给编译器时,编译器会从词法分析(扫描输入并将其划分为标记)到目标代码生成的多个阶段进行处理。

语法分析或解析是第二阶段,即在词法分析之后。它检查给定输入的句法结构,即给定输入是否使用正确的语法(输入所用语言的语法)。它是通过建立一个数据结构(称为“解析树”或“语法树”)来实现的。通过使用语言的预定义语法和输入字符串来构造解析树。如果可以在语法树的帮助下(在派生过程中)生成给定的输入字符串,则发现输入字符串的语法正确。如果不是,则语法分析器报告错误。

语言语法由生产规则组成。

例子:
假设语言语法的生产规则为:

S -> cAd
  A -> bc|a
  And the input string is “cad”.

现在,解析器尝试根据给定的输入字符串的语法构造语法树。它使用给定的生产规则,并根据需要应用这些规则以生成字符串。要生成字符串“ cad”,它使用给定图中所示的规则:
语法分析

在上面的步骤iii中,生产规则A-> bc不适合应用(因为产生的字符串是“ cbcd”而不是“ cad”),因此解析器需要回溯,并应用下一个可用的生产规则在步骤iv中显示A,并生成字符串“ cad”。

因此,给定的输入可以由给定的语法产生,因此该输入在语法上是正确的。
但是需要回溯才能获得正确的语法树,这实际上是一个复杂的实现过程。

解决这个问题的方法可能更简单,我们将在下一篇文章“编译器设计中FIRST和FOLLOW集的概念”中看到。

语法分析测验