7
votes

Java Compiler ne donne pas à toutes les erreurs à la fois

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. :)
    }
}

7 commentaires

Qu'est-ce que vous avez essayé? Postez vos codes.


@JDeveloper: Je pense que sa question est claire.


@Jdeveloper: "Postez vos codes" ??? Lire la question correctement


@ImProver que vous avez raison, j'ai mal compris cette question.


Classe TestCompilation {Public Static Void Main (String [] args) {Syste.out.rintln ("Bonjour"); // première erreur SYSTE.OUT.RINTLN ("Bonjour"); // Deuxième erreur (non imprimé au compilateur) }}


@Jdeveloper :: J'ai posté mon code IT juste deux lignes de code ... Quand je compile au-dessus du programme, Compiler me donnez uniquement une première erreur alors qu'en est-il de la deuxième erreur ... (Selon le fonctionnaire Work :: Répertorié Toutes les erreurs.)


@ HITESH542 Merci pour vos efforts. J'ai reçu vos doutes.


3 Réponses :


12
votes

Je dirais que cela a trait à la manière dont les compilateurs fonctionnent souvent:

  1. Analyse lexicale est effectuée, où le code source est converti en une séquence de "jetons".
  2. Le code est analysé , où le compilateur vérifie si les jetons répondent à la syntaxe de langue. C'est là que votre première ligne échouerait: chaque déclaration de Java doit être terminée par un point-virgule.
  3. Analyse sémantique est effectuée, où le compilateur tente de résoudre les variables, les méthodes, etc. Selon la liste des symboles connus - en Java, cela traduirait à peu près votre parcours de classe.
  4. code est généré où les instructions sources sont traduites soit en bytecode native ni en bytecode intermédiaire (ce dernier est le cas pour Java).

    Si l'une des étapes échoue, le processus doit s'arrêter, car un compilateur ne peut pas effectuer une analyse sémantique lorsque le code ne répond pas à la syntaxe.


0 commentaires

3
votes

Dans la langue Java Partiellement compilateur et partiellement interpréteur et en première compilation Java, le compilateur devrait indiquer toutes les erreurs

Je suis désolé de vous décevoir, mais c'est un non séqueur. L'interprète n'est pas présent à la compilation et n'a rien à voir avec cela.

Le compilateur ne peut pas déterminer toutes vos erreurs à la fois, si, par exemple, certaines d'entre elles sont des erreurs de syntaxe qui empêchent une analyse sémantique, ou une simple erreur sémantique empêche une analyse plus poussée.


0 commentaires

1
votes

Votre deuxième erreur est une erreur uniquement dans un programme Java , c'est-à-dire une chaîne conforme à la syntaxe Java. La notion d'une erreur non syntaxique dans un non-programme n'a pas de sens. Pour le compilateur, toutes les chaînes qui ne sont pas syntaxiquement correctes ont la même signification: Aucun.

C'est comme si vous soumettez le "programme" suivant: xxx

et plaindre que Le compilateur ne vous dit pas qu'une double valeur ne peut pas être indexée.

par exemple, donnant à cette entrée dans un fichier source Java dans Eclipse ne donne que "une erreur de syntaxe sur jetons, supprimez ces jetons."


2 commentaires

Malheureusement pour votre réponse, le compilateur fait vous dit plus ou moins exactement que: 'Erreur: tableau requis, mais double trouvé'. La chaîne que vous avez posterd est une partie d'un programme Java légal et ne montre donc pas votre point le moindre.


@EJP je veux dire ce qui précède pour être le texte du programme entier. Comme il n'y a pas de classe, le compilateur n'a pas besoin de la peine si le texte serait une partie valide d'un programme Java.