作者回复: 多谢建议!
目前,我尽量保证已经拷贝到文稿里的代码,就不再有变化。
如果有变化,我就按照你说的版本管理办法,建多个目录!
我抽时间要把代码库优化一下。整理得更整齐一些。
作者回复: 可以的。当然可以。
如果你用工具的话,antlr是支持javascript的。
如果不用工具,手写词法分析器和语法分析器的话,那就更没有问题了。
我后面可能会抽时间用TypeScript(或其他语言)写一个版本,用于写Visual Studio Code的插件。
再抽出时间,我其实会拿playscript写playscript的编译器,也就是实现自举:-)
作者回复: 计算顺序是语义分析中的一个重要问题。
如果本计算要依赖下级节点先计算完,那么就要在exit方法中。
如果如果只依赖自身,那么在哪个方法都可以。比如,判单">"表达式的返回值类型,那肯定是bool,不依赖其他节点。
作者回复: 对应英文Resolve,可能有些资料也翻译做“解决”?
本质就是建立其正确的引用关系。
作者回复: 同意你的看法。
面向对象首先是一种编程思想。哪怕语言层面没有提供直接的支持,也可以按照面向对象编程的思想来做。具体到C语言,它有结构体,有指针,特别是有能够做任何类型转换的void*指针,具有很大的灵活性,所以是能模拟出面向对象的特性的。
操作系统中的很多东西是用C写的,就有面向对象思想。比如,把很多设备都抽象成文件,按照统一的接口操作。
当然在语言层面上提供支持,会容易一些。
作者回复: 你很善于动脑。
类型推断是第11讲里会讲的内容。
我这里提前说一下:类型推断就是两个计算过程。一个是S属性(综合属性)计算,从下往上推导,比如:
auto a = 2;
你从叶子节点2能推导出这整个语句的类型是int。
再做I属性(继承属性)计算,就是从上到下的推导。a是这个表达式的叶子节点,a的类型是可以从整个表达式的类型继承下来。