编译器设计-有限自动机
Compiler Design - Finite Automata
有限自动机是一种状态机,它以一串符号作为输入,并相应地改变其状态。有限自动机是正则表达式的识别器。当正则表达式字符串被输入到有限自动机中时,它会为每个文本更改其状态。如果输入字符串成功处理并且自动机达到其最终状态,则接受它,即刚刚输入的字符串被认为是当前语言的有效标记。
有限自动机的数学模型包括:
Finite
set of states (Q)
Finite
set of input symbols (Σ)
One
Start state (q0)
Set
of final states (qf)
Transition
function (δ)
设L(r)是有限自动机(FA)识别的正则语言。
状态States:FA的状态用圆圈表示。状态名写在圆圈里。
开始状态Start state:自动机开始的状态,称为开始状态。开始状态有一个箭头指向它。
中间状态Intermediate states :所有中间状态至少有两个箭头;一个指向外,另一个指向内(自己)。
最终状态Final state:如果成功解析输入字符串,则自动机应处于此状态。最终状态用双圆表示。它可能有任意奇数个指向它的箭头和偶数个指向它的箭头。奇数箭头的数目比偶数大一个,即奇数=偶数+1。
转换Transition:当在输入中找到所需的符号时,从一个状态转换到另一个状态。在转换时,自动机可以移动到下一个状态,也可以保持在相同的状态。从一个状态到另一个状态的移动显示为定向箭头,箭头指向目标状态。如果自动机保持在相同的状态,则会绘制一个从状态指向自身的箭头。
Example : We assume FA accepts any three digit binary value
ending in digit 1. FA = {Q(q0, qf), Σ(0,1), q0, qf, δ}
语法分析或分析是编译器的第二个阶段。在本章中,我们将学习构造解析器时使用的基本概念。
我们已经看到,词法分析器可以借助正则表达式和模式规则来识别标记。但是由于正则表达式的限制,词法分析器无法检查给定句子的语法。正则表达式无法检查平衡标记,如括号。因此,这个阶段使用上下文无关语法(CFG),这是由下推自动机识别的。
另一方面,CFG是正则语法的超集,如下所示:
这意味着每一种规则语法都是上下文无关的,但也存在一些超出规则语法范围的问题。CFG是描述编程语言语法的有用工具。
上下文无关语法Context-Free Grammar
在本节中,我们将首先看到上下文无关语法的定义,并介绍用于解析技术的术语。
上下文无关语法有四个组成部分:
一组非终端(V)