Разработка компиляторов

       

Лексический анализ


Исходное текстовое представление программы не очень пригодно для работы компилятора, поэтому во время анализа программа прежде всего разбивается на последовательность строк, или, как принято говорить, лексем (lexeme) . Множество лексем разбивается на непересекающиеся подмножества (лексические классы). Лексемы попадают в один лексический класс, если они неразличимы с точки зрения синтаксического анализатора. Например, во время синтаксического анализа все идентификаторы можно считать одинаковыми.

Размеры лексических классов различны. Например, лексический класс идентификаторов, вообще говоря, бесконечен. С другой стороны, есть лексические классы, состоящие только из одной лексемы, например, подмножество, состоящее из лексемы if. В большинстве языков программирования имеются следующие лексические классы: ключевые слова (по одному на каждое ключевое слово), идентификаторы, строковые литералы, числовые константы. Каждому подмножеству сопоставляется некоторое число, называемое идентификатором лексического класса (token) или, короче, лексическим классом.

Пример. Рассмотрим оператор языка Pascal const pi = 3.1416; Этот оператор состоит из следующих лексем:

  • сonst - лексический класс Const_LC
  • pi - лексический класс Identifier_LC
  • = - лексический класс Relation_LC
  • 3.1416 - лексический класс Number_LC
  • ; - лексический класс Semicolon_LC



Содержание раздела