Лексическая структура языка
ОСНОВЫ ПАСКАЛЯ
1. Структура (состав) языка
В состав языка включается обычно три составляющие: алфавит, синтаксис и семантика. Кроме того в составе синтаксиса выделяют еще так называемую лексическую структуру языка.
Алфавит – это фиксированный для данного языка набор основных символов, из которого будут строиться все основные конструкции языка. Алфавит задается перечислением всех допустимых символов.
Синтаксис задаёт (содержит) правила (для человека) образования допустимых (правильных) для данного языка конструкций и правила образования программы из этих конструкций. Синтаксис описывается с использованием специальных искусственных языков – аналитических (БНФ) и графических (синтаксические диаграммы). Например, определение «арабские цифры» имеет вид:
или Арабские цифры::= 0 | 1 | 2 | 3 | 4 | … | 9
Описание синтаксиса на графическом языке Описание синтаксиса на аналитическом языке
Семантика – правила (для компилятора) толкования конструкций языка (с точки зрения возможности вычисления результата).
Замечание: в программе могут быть конструкции, правильные с точки зрения синтаксиса (человека, написавшего программу по правилам грамматики) и неправильные с точки зрения семантики (компилятора, толкующего то, что написал человек):
Var
m g+k6e5jU43q5rLMfgXyWl61gjKvA/1XRWf53irnerYsWb5q+NSq5R48dBbKv70g6Dj/M+6KcnWbn rQ3VBR2AiKPz9cKFW/LrPnq9/RYWPwEAAP//AwBQSwMEFAAGAAgAAAAhADhP8DjfAAAACQEAAA8A AABkcnMvZG93bnJldi54bWxMj0FPwzAMhe9I/IfISNxY2lEYlKYTQiBxQrAhJG5Za9qyximJtxZ+ Pd4JTrb1np6/Vywn16s9hth5MpDOElBIla87agy8rh/OrkBFtlTb3hMa+MYIy/L4qLB57Ud6wf2K GyUhFHNroGUecq1j1aKzceYHJNE+fHCW5QyNroMdJdz1ep4kl9rZjuRDawe8a7HarnbOwPV6vPDP YfuWpd3X+8/9Jw+PT2zM6cl0ewOKceI/MxzwBR1KYdr4HdVR9QYWmZCzzHQBSvT5eZaB2ojxsOiy 0P8blL8AAAD//wMAUEsBAi0AFAAGAAgAAAAhALaDOJL+AAAA4QEAABMAAAAAAAAAAAAAAAAAAAAA AFtDb250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAAACEAOP0h/9YAAACUAQAACwAAAAAAAAAA AAAAAAAvAQAAX3JlbHMvLnJlbHNQSwECLQAUAAYACAAAACEAnNZPxzcCAABeBAAADgAAAAAAAAAA AAAAAAAuAgAAZHJzL2Uyb0RvYy54bWxQSwECLQAUAAYACAAAACEAOE/wON8AAAAJAQAADwAAAAAA AAAAAAAAAACRBAAAZHJzL2Rvd25yZXYueG1sUEsFBgAAAAAEAAQA8wAAAJ0FAAAAAA== " o:allowincell="f">
С точки зрения семантики языка Паскаль (по правилам т.н. совместимости типов) недопустимо присваивание вещественного значения переменной целого типа. |
r : real;
begin
r := 1.25;
i := r;
end.
Задаётся семантика, в отличии от синтаксиса, не формально (т.е. не на искусственном языке), а посредством неформальных описаний на естественном языке.
Алфавит
Включает в себя буквы, цифры, спец. символы и пустые символы.
Буквы – допускается использование букв латинского алфавита (строчных и прописных, причем регистр букв в программах на Паскале не различается). Буквы русского алфавита не допускается использовать в конструкциях языка (только в составе строк, символьных переменных и комментариев). К буквам в Паскале относится и символ подчеркивания, часто выполняющий при записи сложных (многословных) имен роль пробела (day_of_week).
Цифры – арабские (от 0 до 9) или шестнадцатиричные (от a до f, или от A до F), где a16=1010, …f16=1510..
Пустые символы (их коды – от 0 до 32) – они названы так потому, что не отображаются на экране ЭВМ, но производят некоторое действие. Так, символ с кодом 7 при попытке вывести его на экран вызывает кратковременный гудок динамика, а символ с кодом 32 – пробел (пустое место в тексте на бумаге или на экране дисплея). При подготовке текста, чтобы подчеркнуть наличие в определенном месте пробела, для его обозначения используют символ .
Спец. символы (их 22) – это + - * / = < > ( ) [ ] { } . , : ; ^ @ # $ ‘ . Cюда входят знаки препинания, скобки, знаки операций, Кроме того, некоторые пары символов, рассматриваются как отдельные символы: >=, <=, .. – знак диапазона, <> - знак неравенства, (* и *) – вместо фигурных скобок для обозначения границ комментария, (. и .) – вместо квадратных скобок.
Лексическая структура языка
Минимальная конструкция языка, имеющая смысл, называется лексемой(аналог в обычном языке – слово). Фразы (аналог в обычном языке – предложение) на языке Паскаль записываются с использованием лексем и разделителей.
Замечание: Правильнее говоря, разделители являются особым типом лексем вместе со знаками операций и ключевыми (служебными) словами. Эти особого вида лексемы заранее известны (задаются) компилятору.
В качестве разделителей используются пустые и спец. символы. При этом между двумя соседними лексемами должен находиться хотя бы один разделитель. Сами лексемы строятся из символов алфавита.
Пример:
- разделители, - лексемы (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.
4) логические: true (истина) и false (ложь).
5) строковые - представляют из себя последовательность символов (кроме символа с кодом 13), заключенную слева и справа в кавычки.
В отличие от конструкции языка в строке допустимы символы русского алфавита. Можно разрывать длинную строку и в разрыве ставить символ #:
' Строка 1' #7 ' Строка 2'
Комментарии: в правилах Паскаля комментарий начинается и заканчивается фигурными скобками:
{Комментарий}.
Вместо фигурных скобок можно использовать (* и *):
(* То же комментарий *).
В отличие от других языков Паскаль не допускает вложения комментариев с ограничителями одного типа друг в друга (с ограничителями разных типов - можно).
Директивы (компилятору) -на Паскале директивы записываются как особая форма комментария: {$I+} {$N+} В директиве за левой скобкой идет знак доллара, за ним текст самой директивы. Имеется три вида директив: 1) ключевые директивы 2) директивы параметров 3) директивы условной компиляции. Ключевые директивы содержат указание компилятору включить (I+) или выключить (I-) определенные свои возможности. Директивы параметров определяют значения различных параметров, используемых при компиляции (директива М определяет размер памяти, отводимой компилируемой программе). Директивы условной компиляции позволяют в зависимости от задания тех или иных условий компилировать или исключать из компиляции фрагменты программы (м.б. удобно для отладки программ).
4. Структура программной единицы
В отличие от стандартного Паскаля в Турбо Паскале (и Free Pascal) фразу "Program Имя;" можно не писать.
В случае использования модулей необходимо перечислить их после Uses через запятую. Если в программе используется Uses, оно должно быть сразу после слова Program, или, если такого нет, идти первым.
Секция описания меток имеет следующий вид:
Label
метка1, метка2, ..., меткаn;
На количество и порядок других секций (Const, Type, Var ) в разделе описаний в Турбо Паскале ограничений не накладывается, т.е. может быть несколько секций описания переменных, описания типов, идущих в произвольном порядке. Но есть 2 правила: 1) недопустимы повторные описания одного и того же имени в разных секциях; 2) все нестандартное, что в секции описаний используется, должно быть выше по тексту программы (выше точки использования) определено.
Например, в нижеприведенном случае имеется ошибка – N должно быть определено выше места использования:
Var
v: 1..N;
Const
N = 2;
Структуру, подобную приведенной структуре программы, имеют также и другие программные единицы, к которым также относятся модули, процедуры и функции. Отличие в записи модуля процедуры и функции (от программы), будет в основном в первых строчках:
unit имя;
procedure Имя (список формальных параметров);
function Имя (список формальных параметров);
и в последней строчке будет отличие:
программа заканчивается end . ,
модуль тоже заканчивается end .
процедура и функция заканчиваются end ;
Дата добавления: 2016-05-28; просмотров: 3810;