Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ЯП (Кузьмин) ч.2_new (Паскаль).docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
3.97 Mб
Скачать

3. Лексическая структура языка

Минимальная конструкция языка, имеющая смысл, называется лексемой (аналог в обычном языке – слово). Фразы (аналог в обычном языке – предложение) на языке Паскаль записываются с использованием лексем и разделителей.

Замечание: Правильнее говоря, разделители являются особым типом лексем вместе со знаками операций и ключевыми (служебными) словами. Эти особого вида лексемы заранее известны (задаются) компилятору.

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

Пример:

- разделители, - лексемы (for, to, do – лексемы типа зарезервированное слово, i – лексема типа идентификатор, 1 и 10 – лексемы типа константа).

Анализ правильности слов (лексем) в программе выполняет программа- parser (сканер) (строит и передает синтаксическому анализатору таблицу кодов лексем), а анализ правильности предложений (операторов) языка выполняет программа – scanner (синтаксический анализатор) (на основе таблицы кодов лексем и синтаксических правил проверяет правильность слов и их порядок в предложении).

В Паскале имеются следующие классы лексем: служебные слова, идентификаторы, метки константы, комментарии, директивы.

Служебные (зарезервированные) слова (begin, end, type, var ….)– за ними в языке закреплены определенные функции и они не должны использоваться в других целях. То есть нельзя, например, использовать служебные слова в качестве идентификаторов в программе:

Type:=10;

Begin:=a;

или

Program str;

... сообщение компилятора «Ожидается точка»

begin

str (...); Ошибка: здесь имя программы совпало с именем процедуры STR.

end.

Идентификаторы – используются в программах на Паскале для обозначения имен следующих конструкций: констант, переменных, процедур, функций, меток, модулей, объектов, программ, полей в записи. В Паскале ограничений на длину идентификатора не накладываются, но только первые 63 символа считаются значимыми. Идентификатор может начинаться только с буквы, за которой могут следовать (в любом порядке) буквы или цифры или знаки подчеркивания. Нельзя в идентификаторах использовать буквы русского алфавита, специальные символы и пробелы. В Паскале не различаются регистры букв (прописные или строчные). Идентификаторы могут быть простыми и составными. Составные идентификаторы записываются с использованием символа ‘.’ , который разделяет одну часть сложного имени от другой, например,

aaa.bbb Три объекта – aaa, bbb и ccc – имеют в своем составе поле bbb.

ccc.bbb В составном имени ccc.bbb то, что слева от точки указывает, какому

ddd.bbb конкретному объекту принадлежит поле bbb

Метки – существует два способа записи меток: 1) в виде целых чисел без знака в диапазоне от 0 до 9999. 2) в виде правильных идентификаторов (имен). Метки используются в программах для обозначения точек перехода и отделяются от операторов двоеточием:

goto metka;

….. метка в операторе безусловного перехода

….. оператор, на который происходит безусловный переход

metka: a:=a+1;

метка отмечает место перехода

Константы – Простая константа используется для явного (непосредственного) представление значения (за каждой константой закрепляется одно значение) в программе. Существует два вида простых, т.е. нетипизированных, констант:

  • без имени (литерал, строковое представление константы): с:= а + 2;

  • с именем: Const N=2.

Для удобства в программе значению константы может быть присвоено имя:

Константы делятся на числовые (целые и вещественные), символьные, логические и строковые.

  1. целые – десятичные и шестнадцатиричные. Десятичные записываются с помощью арабских цифр и знака перед числом. Шестнадцатиричные – строятся с использованием шестнадцатиричных цифр, которым предшествует символ $, причем шестнадцатиричные константы м.б. только положительными, т.е. -$25 является правильной константой, а. $-25 является неправильной.

  2. вещественные – имеют две формы записи: с фиксированной точкой и плавающей точкой. C фиксированной точкой – 1.25 . С плавающей точкой: 1.25E-05 (читается как 1.25 на 10 в степени минус 05).

3) символьные имеют две формы записи: 1) 'с' 2) #ЦЦ, где ЦЦ – код символа (в 10-ной системе счисления). Соответствие между символом и его кодом представлено в кодовых таблицах. Для ПЭВМ обычно используется таблица ASCII (American Standard Code for Information Interchange). В этой таблице записаны 256 символов с порядковыми номерами 0..255 (цифры, большие и малые буквы, знаки операций, знаки препинания и др.). Порядковый номер символа в таблице ASCII - это код данного символа.

В кавычки заключаются изображения символов, которые можно ввести с клавиатуры. С помощью решетки и номера обычно обозначают неотображаемые символы, например,. #32 - символ с кодом 32 (пробел). Тот же самый символ можно обозначить с помощью шестнадцатиричного кода символа = #$20.

  1. логические: true (истина) и false (ложь).

  1. строковые - представляют из себя последовательность символов (кроме символа с кодом 13), заключенную слева и справа в кавычки.

В отличие от конструкции языка в строке допустимы символы русского алфавита. Можно разрывать длинную строку и в разрыве ставить символ #:

' Строка 1' #7 ' Строка 2'

Комментарии: в правилах Паскаля комментарий начинается и заканчивается фигурными скобками:

{Комментарий}.

Вместо фигурных скобок можно использовать (* и *):

(* То же комментарий *).

В отличие от других языков Паскаль не допускает вложения комментариев с ограничителями одного типа друг в друга (с ограничителями разных типов - можно).

Директивы (компилятору) - на Паскале директивы записываются как особая форма комментария: {$I+} {$N+} В директиве за левой скобкой идет знак доллара, за ним текст самой директивы. Имеется три вида директив: 1) ключевые директивы 2) директивы параметров 3) директивы условной компиляции. Ключевые директивы содержат указание компилятору включить (I+) или выключить (I-) определенные свои возможности. Директивы параметров определяют значения различных параметров, используемых при компиляции (директива М определяет размер памяти, отводимой компилируемой программе). Директивы условной компиляции позволяют в зависимости от задания тех или иных условий компилировать или исключать из компиляции фрагменты программы (м.б. удобно для отладки программ).