Какие примеры ошибок может обнаружить лексический анализатор? - PullRequest
1 голос
/ 06 октября 2009

Какие примеры ошибок может обнаруживать лексический анализатор в данном фрагменте кода на языке, таком как Java, C ++ или C?

Ответы [ 3 ]

4 голосов
/ 06 октября 2009

Лексер может обнаруживать последовательности символов, которые не имеют возможного значения (где значение определяется синтаксическим анализатором). Например, в Java последовательность bana"na не может быть идентификатором, ключевым словом, оператором и т. Д.

Однако лексер не может обнаружить, что данный лексически действительный токен не имеет смысла или не имеет смысла. Так, например, лексер Java с радостью вернет последовательность токенов final "banana" final "banana", увидев ключевое слово, строковую константу, ключевое слово и строковую константу соответственно.

1 голос
/ 10 октября 2009

В дополнение к случаям, упомянутым ниже, большинство компиляторов также обрабатывают комментарии в лексере. Таким образом, ошибки в комментариях (неправильно вложенные, не закрытые) также могут быть обнаружены здесь.

Другая проблема связана с пользовательскими типами данных, которые должны обрабатываться лексером и парсером. Рассмотрим следующий код:

typedef int myinteger; myinteger x;

Во втором утверждении myinteger - это тип данных, и лексер должен возвращать myinteger как тип данных, а не как идентификатор. Обычно это делается путем перекрестной ссылки на потенциальный идентификатор со списком определенных пользователем типов данных, которые ранее были заполнены синтаксическим анализатором.

Третья проблема касается контекста токена. В контекстно-зависимом языке, таком как C ++, один и тот же токен (например, <) может иметь различное значение (меньше, чем начало параметра шаблона). Это также необходимо обрабатывать в сотрудничестве с анализатором, который может дать отзыв лексеру о его текущем состоянии. </p>

0 голосов
/ 06 октября 2009

Я не проверил дважды грамматику, но думаю, что строка типа «2cat», например, не является каким-либо допустимым / ожидаемым / категорируемым токеном.

...