Как анализатор ll (k) может проверить несколько синтаксических ошибок? - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу парсер, и если парсер обнаружил синтаксическую ошибку, он распечатывает синтаксическую ошибку и останавливается, но я обнаружил, что в современном компиляторе он может сообщать о множественных ошибках, а не только об одной. Например, этот код 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=;
           ^

Так, как анализирует как этот отчет несколько ошибок? Если есть синтаксическая ошибка, все токены позади перепутаны, как он может продолжать анализ?

...