学习《编译原理》我选择的是Loudon所著的《编译原理及实践》,国内的版本是翻译版,个人认为这本书翻译水平一般,建议大家还是去看原版书籍。
在我看来,评价一本编译原理教材的质量应从文法分析开始。为什么这么说呢?一般来看,编译原理教材从词法分析开始,DFA、NFA等知识点会在这一部分引入,但是这一部分不会讲的太深,因为这一部分的一些定理会在另一本书中介绍,即《形式语言与自动机理论》。
今天,我想分享一下《编译原理及实践》的一道题解,即4.02题解,我把先把答案贴出来:
《编译原理及实践》题解——4.02
这道题的描述非常简单,就是数据结构中的括号匹配语言,现在我们要用递归下降程序去实现这样的语法。
由于逻辑简单,由递归下降程序的标准可以轻松写出第一个if体内的伪代码。我们暂且不去看else if当中的语句,我们先去看else部分,很容易可以看出这个代码体内是来判断error情况的,并且error情况简单——当且仅当出现“非括号”语言符号时报错。
有点难点难度或是有点异义的部分应该在于else if部分。return语句或许让一些人摸不到头脑,因为存在这样的一些待识别的输入“)”、“())”;显然这些都是非法的输入,但是这样并不会被该程序报错,像“)”输入,刚一介入递归就退出了,我们无法在A函数体内看出任何对该种情况的惩罚。对这个问题,拙见如下:
就像这本书名一样,我们在学习编译原理的时候应该考虑怎么在实践中去使用这些思想。在这个问题当中,我们可以把输入抽象成一个队列,当队列为空时该输入被接受。这样,只有expected函数可以进行出队行为,这样“)”是不会被接受的。

相关文章:

  • 2021-08-04
  • 2021-11-26
  • 2022-12-23
  • 2021-09-13
  • 2022-01-18
  • 2021-10-28
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-07
  • 2022-02-04
  • 2021-11-02
  • 2021-08-12
  • 2021-07-10
  • 2021-05-25
相关资源
相似解决方案