程序是我们给计算机的一组指令,以获得我们想要的输出。这些指令集通常用高级语言编写。
当我们编写代码时,编程语言的编译器会指出我们所犯的错误(调试器+编译器),这样我们就可以在将代码从高级编程语言转换为低级语言的同时纠正错误。然后,这将创建一个可执行文件,通过该文件,我们可以继续成功执行代码。这一点很重要,因为计算机不理解我们的语言,需要用汇编语言进行对话。要完成此转换过程,需要遵循许多步骤,其中下一步从上一步获取输入。
句法分析与词汇分析都是这些步骤的一部分。这两个步骤分别充当扫描程序和解析器,发现程序的语法结构。理解它们的特性对于理解它们对编译过程的重要性非常重要。
词法和语法分析器不仅在编译器设计中需要,而且在各种其他应用程序中也很流行,例如计算程序复杂性的程序和必须分析配置文件内容的程序。
词汇分析与句法分析
词汇分析 | 语法分析 |
它负责将字符序列转换为标记模式。 | 分析自然语言或计算机语言中符合形式语法规则的符号串的过程。 |
每次读取程序一个字符,输出有意义的词素。 | 令牌作为输入,并生成解析树作为输出。 |
这是编译过程的第一阶段。 | 这是汇编过程的第二阶段。 |
它也可以称为词法分析和标记化。 | 它也可以被称为句法分析和句法分析。 |
词法分析器是模式匹配器。 | 语法分析包括形成一棵树来识别程序语法中的变形。 |
不太复杂的方法通常用于词汇分析。 | 语法分析需要更复杂的方法。 |
词法分析器可能不可移植。 | 解析器总是可移植的。 |
什么是词汇分析?
这是编译的第一阶段,扫描源程序,每次将一个字符转换为有意义的词素或标记。
人们一定想知道什么是词素或标记,因此为了解释,词素是源程序中具有最低语法意义的字符序列。另一方面,标记是词素的一个类别,是程序的基本构建块。词素是标记的一个实例。
输入是源代码,其处理方式是丢弃空格、新行和注释等可忽略的文本。输出转到语法分析阶段以进行进一步转换。令牌的格式为
词法分析器执行词法分析并充当模式匹配器。一系列代码的词法语法可以拆分为一系列词素,并将空格和注释分开并丢弃。它还用于标记源(识别所有词素及其类别)、报告词法错误(如果有)、保存感兴趣的标记的文本、保存源位置以及实现预处理器功能。betway什么公司
将词法分析和语法分析的步骤分离可以优化词法分析器,从而提高过程的效率。它还简化了解析器并保持其可移植性,因为词法分析器可能并不总是可移植的。
什么是语法分析?
编译过程的第二阶段是语法分析,将词法分析生成的标记作为输入并生成解析树。这里,根据源代码语法检查标记组织或词素,并且解析器执行语法分析。语法分析器执行语法分析,它们直接基于语法。它们还负责对输入进行结构丰富的表示,便于处理。
解析树(也称为语法树)检查标记生成的表达式在语法上是否正确。它确保系统结构中不存在任何变形。此外,编译过程还涉及语义分析、中间代码生成、代码生成、代码优化等阶段。解析算法有很多技术,算法的两大类是自顶向下和自底向上解析。
语法分析器生成完整的解析树,或者至少跟踪完整解析树的结构,或者生成解析树来处理导致解析问题的问题子集。尽管如此,语法分析比词汇分析更强大。
著者
乌帕萨尼虾
麻省理工学院世界和平大学