编译器设计-有限自动机

本文介绍了有限自动机在编译器设计中的角色,作为正则表达式的识别器,它处理输入字符串并根据状态变化进行解析。文章详细讲解了有限自动机的数学模型,包括状态、开始状态、中间状态、最终状态和转换函数。接着,讨论了上下文无关语法(CFG)及其在克服正则表达式限制方面的应用,特别是用于描述编程语言的语法。此外,还提到了语法分析器(解析器)的任务,包括生成解析树和错误处理。最后,探讨了派生、解析树、歧义性、关联性和优先级等概念,以及消除左递归和左因子分解的技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译器设计-有限自动机

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值