Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовая работа. / РЯП_Ксю / Other / tyap / Приложение А БНФ

.doc
Скачиваний:
18
Добавлен:
01.05.2014
Размер:
46.08 Кб
Скачать

4.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 <логическое выражение>|

<умножение> <простое выражение>::=<логическое выражение> - <простое выражение>| Простое выражение должно иметь тип общий для всех <логическое выражение> + <простое выражение>| переменных описанных в выражении <логическое выражение>

<выражение>::=<простое выражение> | Если выражение содержит знак отношения, то выражение <простое выражение> <знак отношения> <выражение> должно иметь булевский тип.