Ошибка времени компиляции Java: достигнут конец файла при разборе - PullRequest
0 голосов
/ 07 ноября 2011
public class Test{
    public static void main(String[] arg){
        System.out.println("Alexander The Great");
    }
}

В этом коде, если я удаляю первую кавычку в строке, я получаю 3 ошибки. 1. ')' ожидается 2. незамкнутый строковый литерал 3. не заявление

хорошо, я понял выше ошибки.

Если я уберу вторую кавычку в строке, я также получу 3 ошибки. 1. незамкнутый строковый литерал 2. ';' ожидаемый 3. достиг конца файла при разборе

Я понял 1 и 2, но почему 3 ??

Разве это обычно не происходит, когда брекеты отсутствуют? Но ясно, у меня есть правильное количество скобок. Кроме того, почему в первом случае не выдается ошибка «достигнут конец файла при разборе»?

P.S. Я использую jGrasp, Java 1.6.

Ответы [ 3 ]

1 голос
/ 07 ноября 2011

Если оставить цитату first , это потенциально даст парсеру больше возможностей для работы, поскольку он попытается обработать "Alexander" как ссылку.Как только он попадает в пробел, единственная допустимая вещь - это остальная часть выражения, но вместо этого он думает, что это другой идентификатор.

Возможно, он вставляет бонус ) для попытки восстановления;зависит от реализации.

Если оставить последнюю кавычку, парсер будет в конце строки.Вместо того, чтобы пытаться закрыть это утверждение, оно немного теряется и раскручивается, не может восстановиться и попадает в конец файла.

Вверху моей головы, мне кажется, что, поскольку Javaстроки только однострочные, они могут сделать то же самое и попытаться закрыть строку и / или оператор в этом случае и восстановить немного более изящно.Возможно, я просто упускаю что-то очевидное.

0 голосов
/ 24 июля 2013

использовать общедоступную статическую пустоту main (String arg []) вместо общедоступной статической пустоты main (String [] arg)

0 голосов
/ 07 ноября 2011

Поскольку EOF обнаружен при поиске кавычки. Я не уверен, указаны ли точные сообщения об ошибках для неверного кода.

...