compiler-construction - 自动机在编译器构建中的作用

标签 compiler-construction automata finite-automata

我对自动机在词法分析和其他阶段中发挥的作用有所了解。但令我困惑的是,到底在哪里以及如何进行。我推测,由我们的高级语言代码组成的标记是由某种语言进行分类或识别的,并且该“语言”(如果我们甚至可以称其为 RE 定义的)。 CFG 怎么样?那么有限自动机呢?我们在自动机类中制作的图表、状态、语言和字符串都包含在内。计算机能识别那些状态图吗?

最佳答案

字母表是有限的、非空的符号集。出于我们的目的,字母表上的字符串是该字母表中符号的有限序列。对于我们的目的来说,语言是字母表上的一组字符串。

对于我们来说,语法是一组称为产生式的规则,它通过描述如何构造该语言中的字符串来定义一种语言。常规语法、上下文无关语法和无限制语法都是示例。

对于我们来说,自动机是一组称为转换的规则,它通过描述如何识别该语言中的字符串来定义一种语言。有限自动机、下推自动机和图灵机就是例子。

正则表达式是表示正则语言的特殊符号。它们与常规语法和有限自动机类似,因为它们定义了常规语言。

编译器的第一个工作是处理输入以确定输入是否有效。为此,编译器会检查输入是否是所有有效输入(目标编程语言中的程序源代码列表)的语言(字符串集)中的有效字符串。该语言(字符串集)由语法(定义编程语言)定义,编译器实现自动机(通常编译器可以使用任何达到并包括 TM 级别的功能,但为了性能和简单性通常会限制自身上下文无关或至多上下文相关的功能)。计算机“识别”状态机是指计算机的工作方式使其非常擅长按照图表建议的方式进行操作。

关于compiler-construction - 自动机在编译器构建中的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067547/

相关文章:

compiler-construction - 在编译的哪个步骤中删除注释?

c - 验证解析器中的数据类型/结构

automata - 如何构造 L={a^nb^m where n<=m<=2n} 的下推自动机?

parsing - 测试两种常规语言的交集

algorithm - 如何合并两个有限状态自动机?

c++ - 如何识别可执行文件是由 C 还是 C++ 编译的?

c++ - 自动查找给定机器上最快的 exe 的编译器选项?

c - 如何让 Ragel EOF Action 起作用

theory - 上标加号含义