Синтаксис языка

advertisement
Синтаксис и семантика языка
программирования
Синтаксис – формальные правила, которым должна
соответствовать программа на некотором языке
программирования.
Семантика – смысл отдельных элементов программы,
написанной по правилам синтаксиса.
Прагматика – правила преобразования элементов
программы, написанной на языке программирования,
в элементы программы на другом языке, например в
команды компьютера.
Синтаксис задается в виде правил грамматики, точнее,
порождающей грамматики.
Расширенные порождающие правила Бэкуса
1) каждое правило записывается с новой строки текста;
2) понятие - слово, взятое в угловые скобки < и >;
3) слова Паскаля – зарезервированные слова (например, begin,
end и др.), используются при написании программы;
4) символы Паскаля (например, +, /, *, :=, <= и др.), используются
при написании программы;
5) правило начинается с определяемого понятия, после него
пишутся символы ::= (это есть), далее идет собственно
определение понятия;
6) определение понятия состоит из последовательности понятий,
слов Паскаля, символов Паскаля, символов | (большая
вертикальная черта, надо читать как «или»), символов { }
(большие фигурные скобки), символов [ ] (большие квадратные
скобки);
7) если две части определения разделены символом |, то для
конкретного варианта определяемого понятия используется
только одна из таких частей;
8) если часть определения взята в скобки { }, то она
рассматривается как единое целое;
9) если часть определения взята в скобки [ ], то в конкретном
варианте определяемого понятия она может отсутствовать.
Грамматика базового подмножества Паскаля
(Delphi)
<программа> ::= [program <имя> ;] [uses <список имен> ;] <блок> .
<имя> ::= <имя> {<буква> | _ | <цифра>} | {<буква> | _ }
<список имен> ::= [<список имен> ,] <имя>
<блок> ::= [<описания> ;] <группа операторов>
<описания> ::= [<описания> ;] {<описание типов> | <описание констант> |
<описание переменных> | <описание процедуры> |
<описание функции>}
<группа операторов> ::= begin <список операторов> end
<список операторов> ::= [<список операторов> ;] <оператор>
<описание типов> ::= type <имя> = <тип> |
<описание типов> ; <имя> = <тип>
<тип> ::= [^]<имя> | [^]<стандартный тип> | [^]<запись> | <файловый тип> |
<процедурный тип> | [^] array [[<размерность>]] of <тип> | <класс>
<стандартный тип> ::= <целочисленный тип> | <вещественный тип> | char |
string [[<константа>]]| boolean
<целочисленный тип> ::= integer | word | longint | byte | shortint
<вещественный тип> ::= real | single | double | extended | comp
<размерность> ::= [<размерность> ,] <константа> .. <константа>
<процедурный тип> ::= procedure [(<список аргументов>)] |
function [(<список аргументов>)]:<тип>
<файловый тип> ::= file [of <тип>] | text
<константа> ::= <имя> | <целая константа> | <вещественная константа> |
<символьная константа> | <строковая константа> |
<логическая константа> |(<список констант>) | nil
<список констант> ::= [<список констант> ,] < константа>
<описание констант> ::= const <имя> [:<тип>] = <константа> |
<описание констант> ; <имя> [: <тип>] = <константа>
Download