Курсовая работа. / РЯП_Ксю / Other / tyap / Приложение А БНФ
.doc4.1 Приложение А: Синтаксис и семантика языка в БНФ
<строка>::=’<символы>’
Ограничения на использование меток.
<метки>::= id_label , <метки> | id_label Каждая метка – целое без знака, содержащие максимум 4 цифры из диапазона 0..9999 или идентификатор
Каждая метка прежде чем она будет использована должна быть объявлена в разделе объявления меток. Метки с одинаковыми названиями не допускаются.
<описание константы>::=id_const = <константа> ;
| <описание типизированной константы>
<описание констант>::=<описание константы> | <описание константы> <описание констант>
<описание типизированной константы>::=id_const : Константа, должна быть того типа, который указан в описании <тип> = <типизированная константа> ;
<типизированная константа>::=<константа> Константа должна иметь объявленный тип
<константа>::=<выражение> Выражение не должно содержать ссылок на переменные.
<блок>::=<раздел описания> <составной оператор> |
<составной оператор>
<раздел описания>::=<раздел описания меток><раздел описания> |
<раздел описания констант><раздел описания> | <раздел описания типов> <раздел описания> | <раздел описания переменных><раздел описания> |
<раздел описания меток>|
<раздел описания констант>| <раздел описания типов> | <раздел описания переменных>
<описание типа>::=id_type = <тип> ;
<описания типов>::=<описание типа> ; <описания типов> | <описание типа>
<описание переменной>::=<список идентификаторов переменных> : <тип> ; Имена переменных в списке идентификаторов должны быть
<описания переменных>::=<описание переменной> | уникальны. Тип, задаваемый для переменных, может быть
<описание переменной> ; <описания переменных> идентификатором типа, который был ранее объявлен в разделе
объявления типов.
<список идентификаторов переменных>::=id_var |
id_var , <список идентификаторов переменных>
<раздел описания меток>::= label <метки> ;
<раздел описания констант>::=const <описание констант>
<раздел описания типов>::=type <описания типов>
<раздел описания переменных>::= var <описания переменных>
<программа>::=<заголовок программы> ; <блок> . | <блок> .
<заголовок программы>::=program <id>
<коментарий>::={<строка>} | (*<строка>*) Строка не должна содержать символов } или *)
<тип>::=<простой тип> | <идентификатор булевского типа> | id_type | <идентификатор типа булевских матриц>
<простой тип>::=<отрезок типа> | <идентификатор порядкового типа>
<идентификатор порядкового типа>::=Integer | Shortint | Longint | byte | word
<идентификатор булевского типа>::=boolean
<идентификатор типа булевских матриц>::=
boolmatr [<константа>, <константа>]
<отрезок типа>::=<константа> .. <константа> Константы должны быть одного порядкового типа
<составной оператор>::=begin <операторы> end
<операторы>::=<оператор> | <оператор> ; | <оператор> ; <операторы> |
<условный оператор> | <условный оператор> ; |
<условный оператор> ; <операторы>
<оператор>::=<простой оператор> | <структурный оператор> | id_label : <оператор>
<простой оператор>::=<оператор присваивания> |
<оператор перехода> | <оператор ввода> |
<операторы вывода> | <приведение типа>
<оператор присваивания>::=id_var := <выражение> |
<элемент булевской матрицы> := <выражение>
<оператор перехода>::=goto id_label Метка должна быть описана в разделе объявления меток
и 1 раз встречаться в теле программы.
<оператор ввода>::=read ( id_var ) | readln ( id_var )
<оператор вывода>::=write (<список параметров>) | writeln (<список параметров>) | write | writeln
<write_параметр>::=<строка> | <выражение>
<список параметров>::=<write_параметр> | <write_параметр>, <список параметров>
<структурный оператор>::= <составной оператор> | <оператор цикла>
<условный оператор>::=if <выражение> then <оператор> | Выражение в операторе должно иметь булевский тип
if <выражение> then <оператор> else <оператор> |
if <выражение> then <оператор> else <условный оператор>
<оператор цикла>::=repeat <операторы> until <выражение> Выражение в операторе должно иметь булевский тип
<Знак отношения>::=< | > | <= | >= | = | <>
<множитель>::=id_var | id_const | not <множитель> |
<элемент булевской матрицы> | - <множитель> | (<выражение>)
<элемент булевской матрицы>::=id_var идентификатор переменной должен быть типа булевских
[<выражение>, <выражение>] матриц, выражение должно быть целочисленного типа.
<логическое умножение>::=<множитель> and <логическое умножение> |
<множитель>
<целое умножение>::=<логическое умножение> div <целое умножение> |
<логическое умножение> mod <целое умножение> |
<логическое умножение> shl <целое умножение>| <логическое умножение> shr <целое умножение>|
<логическое умножение>
<умножение>::=<целое умножение> * <умножение> |
<целое умножение> / <умножение> |
<целое умножение>
<логическое выражение>::=<умножение> or <логическое выражение>|
<умножение> xor <логическое выражение>|
<умножение> <простое выражение>::=<логическое выражение> - <простое выражение>| Простое выражение должно иметь тип общий для всех <логическое выражение> + <простое выражение>| переменных описанных в выражении <логическое выражение>
<выражение>::=<простое выражение> | Если выражение содержит знак отношения, то выражение <простое выражение> <знак отношения> <выражение> должно иметь булевский тип.