Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java compiler not give all error at a time

Tags:

java

        System.out.println("First eror ::  without semicolon ") // first Error
        System.Out.println("This second error :: OUT object not used proper :: "); //second error


class TestCompilation
{
    public static void main(String []args)
    {   
        System.out.println("Hello no semicolon::")//First Error 
        System.Out.println("Hello out spell not correctely::"); //Second Error 

        }

}

whenever i compile above code by JAVAC command in cmd it gives only First Error means not give second Error. In java language partially compiler and partially interpreter and In java first compilation happen so compiler should list out all errors but it gives me only single error. why its happening ? i dont understand so please help me out from this problem..


I think now i am clear about my question means compiler works totally ...

For that i create simple example it will help you to understand the java compiler working .

class TestCompilation
{
    public static void main(String []args)
    {   
        Syste.out.rintln("Hello");//First Error 
        Syste.Out.rintln("Hello");//Second Error (Not printed at compiler time because it syntatically correct as in compiler first phase)  
        Hitesh542.add(); //there is no such class called Hitesh542.- but compiler thinks that it is right way to call the method. So it passes the first time.
        Hitesh542.add()();//Look out here.. There is a problem, that we can't call a method like this..So it will show the error on first lookup.
        System.otu.println("Hello")//second  Errorasdasdas

        if(); //look this is also an error.- A BASIC syntax error shown at the first lookup.

        try{
            int i = 10 / 0;
        }
        //Third error

        //So bottom line is the JAVA syntatical errors are checked first i.e The SYNTAX of JAVA not the classes or objects.
        //But obv is the first thing is Java Compiler should get the Java class first for compilation on proper path. :)
    }
}
like image 306
Hits Avatar asked Jul 31 '13 09:07

Hits


Video Answer


2 Answers

I'd say this has to do with how compilers often work:

  1. Lexical analysis is performed, where the source code is converted into a sequence of "tokens".
  2. The code is parsed, where the compiler checks whether the tokens meet the language syntax. This is where your first line would fail: every statement in Java must be ended with a semicolon.
  3. Semantic analysis is performed, where the compiler tries to resolve variables, methods, etc. according to the list of known symbols - in Java, this would roughly translate to your classpath.
  4. Code is generated where the source statements are translated either into native bytecode or some intermediate bytecode (the latter is the case for Java).

If one of the steps fails, the process must stop, because a compiler cannot perform semantic analysis when the code doesn't meet the syntax.

like image 114
mthmulders Avatar answered Sep 29 '22 14:09

mthmulders


In java language partially compiler and partially interpreter and In java first compilation happen so compiler should list out all errors

I'm sorry to disappoint you but that's a non sequitur. The interpreter isn't present at compile time and has nothing whatsoever to do with it.

The compiler can't determine all your errors at once, if for example some of them are syntax errors which preclude semantic analysis, or a simple semantic error precludes further analysis.

like image 30
user207421 Avatar answered Sep 29 '22 13:09

user207421