• 罗 乾 林
    2020-11-17
    老师您好,问个与本节不相关的问题,编译原理之美的代码在2020年4月14号这次提交(commit d2b29fea450c185ecb17261677f674ca967a49a8),使得一些代码不能运行了,比如playscript-java/src/examples/closure.play,还有对象带参数的构造函数等。 看代码注释中有如下注释: “把本地变量加到符号表。本地变量必须是边添加,边解析,不能先添加后解析,否则会引起引用消解的错误。 Aaaaaaaaaaayou同学请看这里。 ” 想知道Aaaaaaaaaaayou同学提出的啥问题,在哪种情形下会引起引用消解的错误

    作者回复: 我最近注意到了这个问题。在提交代码时没有做全面的测试。主要是影响到了函数参数的解析。我会这两天找时间修复! Aaaaaaaaaaayou提出的问题,是一个做语义分析时很关键的问题,也就是建立符号表和引用消解的时机问题。正确的方法,是一边建立输入符号,一边做应用消解,否则引用消解就会出错。比如: {//外部Scope int a = 1; { //内部Scope a = 2; //这里的a引用的是外部Scope的a int a = 3; a + b; //这里的a引用的是内部Scope的a } } 这个点看似很小,但对语义分析程序的设计很关键。在《编译原理实战课》中,我还特意分析了Java语言的编译器是怎么处理输入符号表和引用消解的。 感谢你的提醒!

    共 2 条评论
    2
  • math715
    2020-11-17
    谢谢宫老师分享,期待太久了!!!

    作者回复: 抛砖引玉! 你有兴趣的话,可以顺着课程的思路,继续往深入探索!

    
    1
  • ifelse
    2022-02-04
    第一次看,收货很多,需要多看加练习
    
    