• 逸飞兮
    2019-09-03
    老师,您好,提个小建议。代码可以按照每节课程建一个文件夹,如果后面课程的代码是基于之前的,可以复制一份到对应的文件夹再修改,这样通过目录可以直接看到整个过程。没有一直跟着老师的课程节奏走,看代码需要翻git记录,有些麻烦。

    作者回复: 多谢建议!
    目前,我尽量保证已经拷贝到文稿里的代码,就不再有变化。
    如果有变化,我就按照你说的版本管理办法,建多个目录!
    我抽时间要把代码库优化一下。整理得更整齐一些。

     1
     5
  • mcuking
    2019-09-08
    这个脚本语言使用 Java 或 C++ 实现的,请问下我想用 javascript 实现一个这样的脚本语言可以吗?

    作者回复: 可以的。当然可以。
    如果你用工具的话,antlr是支持javascript的。
    如果不用工具,手写词法分析器和语法分析器的话,那就更没有问题了。
    我后面可能会抽时间用TypeScript(或其他语言)写一个版本,用于写Visual Studio Code的插件。
    再抽出时间,我其实会拿playscript写playscript的编译器,也就是实现自举:-)

     1
     4
  • 沉淀的梦想
    2019-09-03
    语义分析的时候,有的时候在listener的enter中实现,有的时候在exit中实现,listener的enter和exit方法的具体区别是什么呢?

    作者回复: 计算顺序是语义分析中的一个重要问题。
    如果本计算要依赖下级节点先计算完,那么就要在exit方法中。
    如果如果只依赖自身,那么在哪个方法都可以。比如,判单">"表达式的返回值类型,那肯定是bool,不依赖其他节点。

    
    
  • 沉淀的梦想
    2019-09-03
    文中多次提到的“消解”的具体含义是什么呢?

    作者回复: 对应英文Resolve,可能有些资料也翻译做“解决”?
    本质就是建立其正确的引用关系。

    
    
  • d
    2019-09-02
    c语言也能写成面向对象风格,只要实现了面向对象的范式,就是面向对象模型编程,不知说的对不对,还请宫老师指正。

    作者回复: 同意你的看法。
    面向对象首先是一种编程思想。哪怕语言层面没有提供直接的支持,也可以按照面向对象编程的思想来做。具体到C语言,它有结构体,有指针,特别是有能够做任何类型转换的void*指针,具有很大的灵活性,所以是能模拟出面向对象的特性的。
    操作系统中的很多东西是用C写的,就有面向对象思想。比如,把很多设备都抽象成文件,按照统一的接口操作。
    当然在语言层面上提供支持,会容易一些。

    
    
  • 李梁 | 东大
    2019-09-02
    请问c++ auto变量能进行对象类型推导,这是怎么实现的呢

    作者回复: 你很善于动脑。

    类型推断是第11讲里会讲的内容。
    我这里提前说一下:类型推断就是两个计算过程。一个是S属性(综合属性)计算,从下往上推导,比如:
    auto a = 2;
    你从叶子节点2能推导出这整个语句的类型是int。
    再做I属性(继承属性)计算,就是从上到下的推导。a是这个表达式的叶子节点,a的类型是可以从整个表达式的类型继承下来。

    
    
我们在线,来聊聊吧