相关疑难解决方法(0)

是否有更现代的OO版"让我们构建一个编译器"?

是否有更现代的,可能是面向对象的,相当于Jack Crenshaw的" Let's Build a Compiler "系列?

不久前,我偶然发现了" 让我们编写一个编译器 ",并且无法拒绝编写一些代码.我在C#中编写了一个递归下降的C编译器,输出.NET CIL."写一次,到处泄漏"是我的口号.

太糟糕了,直到太晚才发现解析C是一场噩梦.

我现在有兴趣用Java编写一个Java编译器,它输出.NET CIL或程序集,目的是自引导.我希望可能会有更新的教程.

另外,您是否会花更多时间进行前期设计,或者只是编写大量测试来支持无情重构的能力.回想起来,我倾向于后者.编译器工作但代码非常糟糕.

java compiler-construction oop recursion refactoring

37
推荐指数
3
解决办法
6658
查看次数

覆盖受保护的方法,并尝试从超类中调用它

我的问题来自一个项目.因此,让我抽象出一些不相关的细节.

我有一个JAVA公共类A,它有两个受保护的静态方法,foo()和bar().方法foo()在其体内调用bar().

public class A{
  protected static foo(){
     ...
     bar()
     ...
  }
  protected static bar(){print("A.bar()");}

} 
Run Code Online (Sandbox Code Playgroud)

现在我还有一个B级扩展A.在B中,我重写bar()

class B extends A{
  @Overrides
  static protected bar(){ print("A.bar() extended");

}
Run Code Online (Sandbox Code Playgroud)

最后,我从B中的一个类调用foo()

class B extends A{
  ...
  public static main(){foo()} 
}
Run Code Online (Sandbox Code Playgroud)

我无法理解两点1.编译器(Eclipse)要求我删除@Override注释.为什么?2.最后main()输出"A.bar()",这意味着已解析的bar()目标是A类,但我打算覆盖bar()并使用A的foo()来调用修改后的bar( ).我怎样才能做到这一点?

你有什么看法?

java extends overriding

2
推荐指数
2
解决办法
1526
查看次数