Я пишу парсер, и если парсер обнаружил синтаксическую ошибку, он распечатывает синтаксическую ошибку и останавливается, но я обнаружил, что в современном компиляторе он может сообщать о множественных ошибках, а не только об одной.
Например, этот код C ++: i = ?int j=;
не имеет смысла, отчет компилятора (Clang) выглядит так:
/home/liu/source/cppsh/main.cpp:3:3: error: use of undeclared identifier 'i'
i = ?int j=;
^
/home/liu/source/cppsh/main.cpp:3:7: error: expected expression
i = ?int j=;
^
/home/liu/source/cppsh/main.cpp:3:12: error: expected '(' for function-style cast or type construction
i = ?int j=;
~~~ ^
/home/liu/source/cppsh/main.cpp:3:12: error: expected ':'
i = ?int j=;
^
:
/home/liu/source/cppsh/main.cpp:3:7: note: to match this '?'
i = ?int j=;
^
/home/liu/source/cppsh/main.cpp:3:14: error: expected expression
i = ?int j=;
^
/home/liu/source/cppsh/main.cpp:3:12: error: use of undeclared identifier 'j'
i = ?int j=;
^
Так, как анализирует как этот отчет несколько ошибок? Если есть синтаксическая ошибка, все токены позади перепутаны, как он может продолжать анализ?