【编译原理】七、从编码过程理解生成式

本文介绍了生成式在词法解析中的应用,强调了上下文无关性在代码解析中的作用。通过解析过程的步骤解释,以及与自然语言的对比,突出了编程语言设计的简化特性。作者提倡理论与实践相结合的学习方法,后续将探讨语法解析。
摘要由CSDN通过智能技术生成

1. 前言

前面的文章中,我们从理论和实践的角度,围绕着代码解析做了相关工作。理论和实践密不可分,通过实践,我们可以加强对理论的理解。本篇文章我们主要总结对生成式理论的补充理解。

2. 生成式与词法解析

生成式主要用作词法解析。

生成式就是词法公式,使用它,我们可以实现上下文无关的代码解析。
上下文无关,只是一个相对的概念。它是指,解析本条词法,只需要生成式即可,不需要其他信息。即上下文无关,只和生成式相关。

首先指出一个理解误区:

  • 解析代码并不是在每次解析时,都需要先判断将要出现的代码内容,根据内容去判断该怎么去解析。如果是这样,那么内容出现的可能性太多,很难去进行解析。
    其实,只有在识别起始符的时候,才需要判断被解析的代码内容是什么。识别出起始符后,随着越来越多的信息被确定下来,后续的解析将变成:我们希望出现什么内容,如果没有出现生成式预期的内容,只需要报错即可。也就是说,起始符解析完成后,解析会越来越简单。

所以,任何生成式对应的词法解析过程,主要分成以下几个步骤:

  • 分辨起始符
  • 期望中间符号
  • 期望结束符号

之所以要期望结束符号,是因为只有前一个生成式对应的语法结束了,此生成式对应的所有字符消耗完后,下一个生成式的起始符号才能刚好被解析到。

进一步地,一个代码文件的所有代码,将不再是一个一个字符组成的字符流,而应该是一个一个生成式对应的词法/语法结构,一个紧挨着一个。正因为整个代码文件被划分成一个一个的独立的,上下文无关的“小模块”,解析整个文档才成为代码可以完成的事情。相反,如果无法简单的独立成一个一个上下文无关的小模块,例如人类的自然语言,那么解析起来就比较困难。我们也可以理解成,编程语言是自然语言的简化版本,简化到可以被解析程序在较快的时间内进行解析,以满足实际使用需求。

3. 总结

通过实际编码,可以加深对生成式的理解。理论本身的创造过程应该是从实践中总结出来的,但是我们在学习理论的时候,往往是从理论开始的,这就造成了理论很难理解,理论本身有时候并不是很难,而是没有和实践结合起来。

词法解析部分的基本原理,我们基本弄明白了。后面我们将进行语法解析的理论学习及程序设计。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撬动未来的支点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值