/ / Błąd kompilacji Java: osiągnięty koniec pliku podczas analizowania - java, kompilacja-kompilacja, kompilacja, błędy kompilatora

Błąd kompilacji Java: osiągnięty koniec pliku podczas analizowania - java, kompilacja-kompilacja, kompilacja, błędy kompilatora

public class Test{
public static void main(String[] arg){
System.out.println("Alexander The Great");
}
}

W tym kodzie, jeśli usunę pierwszy znak cudzysłowu w ciągu, otrzymam 3 błędy. 1. ")" oczekiwano 2. niezamknięty ciąg literalny 3. nie oświadczenie

ok, zrozumiałem powyższe błędy.

Jeśli usunę drugi znak cudzysłowu w ciągu, otrzymam również 3 błędy. 1. niezamknięty ciąg literalny 2. ";" spodziewany 3. osiągnął koniec pliku podczas analizy

Zrozumiałem 1 i 2, ale dlaczego 3?

Czy to zwykle zdarza się, gdy brakuje aparatu ortodontycznego, ale oczywiście mam odpowiednią liczbę aparatów ortodontycznych. Dlaczego pierwszy przypadek nie zawiera błędu "osiągnął koniec pliku podczas analizowania"?

P.S. Używam jGrasp, java 1.6.

Odpowiedzi:

1 dla odpowiedzi № 1

Opuszczając pierwszy Cytuj potencjalnie daje parserowi nieco więcejpracować z, ponieważ będzie próbował potraktować "Aleksandra" jako punkt odniesienia. Po trafieniu w przestrzeń jedyną legalną rzeczą jest reszta wyrażenia, ale zamiast tego uważa, że ​​jest to kolejny identyfikator.

Może to być premia ) próbować odzyskać; zależy od wdrożenia.

Pozostawienie ostatniego cytatu spowoduje wysłanie analizatora składnido końca linii. Zamiast próbować zamknąć to stwierdzenie, traci trochę czasu i obraca się, nie może odzyskać i trafia na koniec pliku.

Z góry mojej głowy, wydaje mi się, że od tego czasuŁańcuchy Java są tylko jednowierszowe, może zrobić to samo i spróbować zamknąć ciąg i / lub instrukcję w tym przypadku i odzyskać nieco więcej wdzięku. Może jednak brakuje mi czegoś oczywistego.


0 dla odpowiedzi nr 2

Ponieważ napotkano EOF podczas wyszukiwania znaku zapytania. Nie jestem pewien, czy określone komunikaty o błędach, które mają być emitowane dla złego kodu, są określone, czy nie.


-1 dla odpowiedzi nr 3

użyj public static void main (String arg []) w miejsce publicznego statycznego void main (String [] arg)