首选语言:C/C++,Java和Ruby.
我正在寻找一些有用的书籍/教程,如何编写自己的编译器只是为了教育目的.我最熟悉C/C++,Java和Ruby,所以我更喜欢涉及这三者之一的资源,但任何好的资源都是可以接受的.
我一直想用自己的语言编写一段时间(表面上是为了学习经验),因此需要在构建解析器,解释器和编译器时相对基础.所以:
编辑:我不是在寻找编译器编译器/解析器编译器,如Lex,Yacc和Bison ......
compiler-construction parsing interpreter compiler-theory language-theory
为了编写更好的代码,深入了解编译器的作用是否值得?
多少就足够了?我不是一个擦洗器,但我在想,了解编译器的运行方式会让我成为更好的程序员.我错了吗?
如果是这样,您会推荐哪些资源?
谁可以给我解释一下这个?首先,我知道为什么这个代码
String getName(){
for(;;){}
}
Run Code Online (Sandbox Code Playgroud)
将违反return类型方法:它是无限的,但为什么这段代码需要最终的返回值?
String getName(){
for(;i < limit; i++){// i is already defined
if(someArrayList.get(i).isDead)
continue;
return someArrayList.get(i).name;
}
//needs a final return
}
Run Code Online (Sandbox Code Playgroud)
返回值存在于循环内部并返回getName()方法的值,那么原因是什么?另一篇文章建议,如果循环对我的条件是负面的,那么我用这样重写:
String getName(){
for(; i < 10; i++){// i is already defined
if((i+1) == limit){
if(!someArrayList.get(i).isDead)
return "";
}else{
if(someArrayList.get(i).isDead)
continue;
return someArrayList.get(i).name;
}
}
// needs a final return
}
Run Code Online (Sandbox Code Playgroud)
相同的编译时错误,即使我i在for循环条件中重新定义0,所以我i变为零,如果内部条件检出否定我自己处理它.总而言之,如果我将它嵌套在无限循环中,那就没关系.
String getName(){
for(;;){
for(; i < limit; i++){// …Run Code Online (Sandbox Code Playgroud)