相关疑难解决方法(0)

学习编写一个编译器

首选语言:C/C++,Java和Ruby.

我正在寻找一些有用的书籍/教程,如何编写自己的编译器只是为了教育目的.我最熟悉C/C++,Java和Ruby,所以我更喜欢涉及这三者之一的资源,但任何好的资源都是可以接受的.

language-agnostic compiler-construction

699
推荐指数
29
解决办法
29万
查看次数

在解析器,解释器和编译器上学习资源

我一直想用自己的语言编写一段时间(表面上是为了学习经验),因此需要在构建解析器,解释器和编译器时相对基础.所以:

  • 有谁知道构建解析器,解释器和编译器的任何好资源?

编辑:我不是在寻找编译器编译器/解析器编译器,如Lex,Yacc和Bison ......

compiler-construction parsing interpreter compiler-theory language-theory

29
推荐指数
6
解决办法
7784
查看次数

我们应该知道多少编译器?

为了编写更好的代码,深入了解编译器的作用是否值得?

多少就足够了?我不是一个擦洗器,但我在想,了解编译器的运行方式会让我成为更好的程序员.我错了吗?

如果是这样,您会推荐哪些资源?

compiler-construction

10
推荐指数
3
解决办法
1370
查看次数

Java循环编译错误

谁可以给我解释一下这个?首先,我知道为什么这个代码

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)

java loops

1
推荐指数
1
解决办法
520
查看次数