最近在忙活语意层面的东西。
这部分内容的实现进度不像之前作语法处理模块那样顺畅。
一方面,自己以前的开发经验主要还是集中在语法方面,在语意方面的积累并不是
很厚,这次又是重起炉灶,从头开发设计编译器,无论是在流程框架上,还是在实
现细节上都需要花费不少时间去梳理,熟悉。
另一方面,从语法描述到语法树这个层次所涉及的变换的跨度并不是很大,所处理
的各个元素之间也相对独立,处理起来也方便一些,而语意层面涉及到的变换和抽象
明显增多,待处理元素之间的交互也增加,需要处理的事情也就复杂起来。
比方说,在语法处理模块中,只要是符合语法规则的源文件输入,都会被读入并生成
相应的语法结构。而在语意层面,则要对语法阶段生成的数据进行语意判断,结合完整
的源文件输入形成的上下文信息来作相应处理。
更具体一些,以表达式处理为例,一个表达式只要是符合语言的语法规则,就会在语法处
理阶段被读入并生成相应的语法树。而在语意处理阶段,我们就至少需要对这个表达式作如下
处理:
1). 表达式里使用的变量是否存在相应的定义语句?
2). 表达式里涉及到的运算操作(加/减 等)和其对应的操作数的类型是否兼容?比如,
通常来说,是不允许对浮点操作数执行移位这样的操作的.
3). 表达式里是否使用到了常量,如果用到了的话,需要将该常量名替换为具体的
数值或是建立起该常量名到相应常量值的链接关系,以便于在表达式求值过程中的
使用。
除了表达式处理以外,语意层面还会涉及到作用域(Scope),函数/过程调用的实参校验
等工作。
而要完成语意层面的这些工作,往往需要将不同的语法元素的信息以某种方式整合起
来进行处理,而在语法层面,通常来说,只要处理好当前源文件输入所对应的语法单元就
可以了。所以,在语意层面的处理中,涉及到的信息更多,信息的组合方式更丰富,为了
完成处理需要引入的变换和抽象也相应增多。这也就给设计人员带来了更大的挑战。
花了将近两周的时间,眼下总算是将语意层面的工作梳理出了一个框架,这两周自己编
写的代码总量也不到100行,绝大多数时间都花在思考,设计和讨论上了。期间也经历过
数次思路上的反复,每次都感觉自己掌握全局了,在跟同事讨论过后,或是一觉醒来,才
发现自己又漏了些东西没有考虑到。从无知到自以为有知,再认识到自己无知,这种循环,
可说是反反复复,及至到现在,也不敢说自己的思路已经完善具体了,只能说眼下有一个相
对清晰的框架和脉络,可以在此基础上开始具体的设计开发工作了。在具体执行的过程中自
己还需要针对发现的问题作出相应的调整,不过,有了这两周的工作基础,我想那应该大抵
是细节上的修正了。
这部分内容的实现进度不像之前作语法处理模块那样顺畅。
一方面,自己以前的开发经验主要还是集中在语法方面,在语意方面的积累并不是
很厚,这次又是重起炉灶,从头开发设计编译器,无论是在流程框架上,还是在实
现细节上都需要花费不少时间去梳理,熟悉。
另一方面,从语法描述到语法树这个层次所涉及的变换的跨度并不是很大,所处理
的各个元素之间也相对独立,处理起来也方便一些,而语意层面涉及到的变换和抽象
明显增多,待处理元素之间的交互也增加,需要处理的事情也就复杂起来。
比方说,在语法处理模块中,只要是符合语法规则的源文件输入,都会被读入并生成
相应的语法结构。而在语意层面,则要对语法阶段生成的数据进行语意判断,结合完整
的源文件输入形成的上下文信息来作相应处理。
更具体一些,以表达式处理为例,一个表达式只要是符合语言的语法规则,就会在语法处
理阶段被读入并生成相应的语法树。而在语意处理阶段,我们就至少需要对这个表达式作如下
处理:
1). 表达式里使用的变量是否存在相应的定义语句?
2). 表达式里涉及到的运算操作(加/减 等)和其对应的操作数的类型是否兼容?比如,
通常来说,是不允许对浮点操作数执行移位这样的操作的.
3). 表达式里是否使用到了常量,如果用到了的话,需要将该常量名替换为具体的
数值或是建立起该常量名到相应常量值的链接关系,以便于在表达式求值过程中的
使用。
除了表达式处理以外,语意层面还会涉及到作用域(Scope),函数/过程调用的实参校验
等工作。
而要完成语意层面的这些工作,往往需要将不同的语法元素的信息以某种方式整合起
来进行处理,而在语法层面,通常来说,只要处理好当前源文件输入所对应的语法单元就
可以了。所以,在语意层面的处理中,涉及到的信息更多,信息的组合方式更丰富,为了
完成处理需要引入的变换和抽象也相应增多。这也就给设计人员带来了更大的挑战。
花了将近两周的时间,眼下总算是将语意层面的工作梳理出了一个框架,这两周自己编
写的代码总量也不到100行,绝大多数时间都花在思考,设计和讨论上了。期间也经历过
数次思路上的反复,每次都感觉自己掌握全局了,在跟同事讨论过后,或是一觉醒来,才
发现自己又漏了些东西没有考虑到。从无知到自以为有知,再认识到自己无知,这种循环,
可说是反反复复,及至到现在,也不敢说自己的思路已经完善具体了,只能说眼下有一个相
对清晰的框架和脉络,可以在此基础上开始具体的设计开发工作了。在具体执行的过程中自
己还需要针对发现的问题作出相应的调整,不过,有了这两周的工作基础,我想那应该大抵
是细节上的修正了。
1838

被折叠的 条评论
为什么被折叠?



