【编译原理】讨论
第一讲 【绪论】
【讨论1-1】编译过程与人工翻译过程之间的关系两者存在一定的对应关系。
编译的过程与人工翻译自然语言的过程存在着什么样的对应关系?
例如,人工翻译在进行的时候先会分析源语言的语义,获取语义(以抽象的概念存储在翻译者的脑中)后,再用目标语言表达出来,就此完成翻译。
而在编译的过程中,编译器也是先通过词法分析、语法分析、语义分析获取句子的语义,以中间形式表示(如三地址码或语法树),再从中间形式生成目标代码。
可见,这两个过程存在很大的相似性。
【讨论1-2】符号表中NAME字段的设计
符号表中NAME字段为什么要设计字符串表这样一种数据结构,而不是把标识符对应的字符串直接存放到name字段中?
类比数据库设计的知识,两者存在一定的相似性。
不同标识符的NAME字段长度往往不同,如果以变长存储,就会使得符号表的查询效率降低,增大符号表管理的难度;
而若是以定长存储,很显然必须为该字段按照最大长度分配空间,而造成空间的严重浪费。
因此,只在NAME字段里面存储类似指针功能的定长字段,既能节省空间,又不会显著影响查询效率,是一种较好的设计思路。
第二讲 【语言及其文法】
【讨论2-1】计算机中是如何表示语言的?
计算机中是如何表示语言的?
计算机中的语言以编码形式存储,常见的有ascii码、utf码、gbk码,通过将各种字符串编码为16进制字符串存储,在底层以二进制方式存储在存储设备上。
【讨论2-2】每一类单词可否看成一种语言?
每一类单词可否看成一种语言?
语言的形式化定义为:由文法G的开始符号S推导出的所有句子构成的集合,称为文法G生成的语言。那么,只要存在相应的文法,每一类单词当然可以看成是一种语言。
那么是否存在这样的语言呢?乍看之下合法单词的生成好像很难有形式化的定义,但是实际上单词的数目是有限的,那么我们可以通过穷举来定义满足要求的文法:将所有的某一类的单词都定义为终结符,开始符号S作为生成式的左端,右端是这些终结符通过或符号“|”连接。这样,我们的文法就定义好了。
因此,这个问题的回答应该是肯定的。