Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик по ТЯП.DOC
Скачиваний:
10
Добавлен:
01.05.2014
Размер:
240.13 Кб
Скачать

Переменные:

<переменная> ::= [(<имя типа>)] <переменная старого типа>

<переменная старого типа> ::= <имя переменной> | <индексированная переменная> | <обозначение поля>

При указании имени типа происходит явное преобразование типа значения переменной, в этом случае тип должен быть ранее определен. Неявное преобразование типов происходит в операторе ввода. Явное преобразование типов возможно для предопределенных типов в следующих случаях:

из \ в

integer

real

complex

boolean

integer

+

+

+

+

real

-

+

-

-

complex

-

-

+

-

boolean

+

+

+

+

<имя переменной> ::= идентификатор

Указанный идентификатор должен соответствовать имени определенной ранее переменной.

<индексированная переменная> ::= <переменная-массив> [<индекс>{,<индекс>}]

<переменная-массив> ::= <переменная>

Переменная должна соответствовать определенному ранее массивному типу.

<индекс> ::= <арифметическое выражение>

Арифметическое выражение должно соответствовать типу, приводимому к типу integer.

<обозначение поля> ::= <переменная-запись>.<имя поля>

<имя поля> ::= идентификатор

<переменная-запись> ::= <переменная>

Переменная должна соответствовать определенному ранее записному типу.

Операторы

Операторы объединяются в раздел операторов:

<раздел операторов> ::= <составной оператор>

Перед оператором допускается метка, на которую можно ссылаться с помощью оператора перехода.

<оператор> ::= <помеченный оператор> | <непомеченный оператор>

<помеченный оператор> ::= метка: <непомеченный оператор>

<непомеченный оператор> ::= <пустой оператор> | <оператор присваивания> | <оператор ввода> | <оператор вывода> | <составной оператор> | <оператор безусловного перехода> | <условный оператор> | <цикл с предусловием>

<пустой оператор> ::=

Оператор присваивания

<оператор присваивания> ::= <переменная>:=<выражение>

Семантика:

  1. вычисление значения выражения;

  2. проверка соответствия типа вычисленного значения типу переменной;

  3. в случае совпадения типов, замена текущего значения переменной на новое значение.

Оператор ввода

<оператор ввода> ::= read(<переменная>)

Семантика:

  1. ввод значения;

  2. попытка неявного преобразования типа введенного значения к типу переменной;

  3. в случае успеха, замена текущего значения переменной на новое значение.

Оператор вывода

<оператор вывода> ::= write(<данные для вывода>)

<данные для вывода> ::= <переменная> | строка_символов

Семантика:

  1. вычисление значения выражения;

  2. попытка вывода вычисленного значения;.

Составной оператор

<составной оператор> ::= begin <последовательность операторов> end

<последовательность операторов> ::= <оператор> {;<оператор>}

Семантика:

составной оператор задает последовательность выполнения операторов.

Оператор безусловного перехода

<оператор безусловного перехода> ::= goto метка

Семантика:

оператор перехода указывает, что процесс выполнения должен продолжаться с другого «места» программы, обозначенного меткой.

Условный оператор

<условный оператор> ::= if <выражение> then <оператор> [else <оператор>]

Семантика:

  1. вычисление значения отношения (логического выражения);

  2. если значение - «истина», то выполняется оператор, следующий за словом then;

  3. если значение - «ложь», то выполняется оператор, следующий за словом else, если оно (слово) есть.

Цикл с предусловием

<цикл с предусловием> ::= while <выражение> do <оператор>

Семантика:

  1. вычисление значения отношения (логического выражения);

  2. если значение - «истина», то выполняется оператор, следующий за словом do, затем переход к пункту 1;

  3. если значение - «ложь», то оператор завершается.

Описание меток

Описания меток объединяются в раздел меток:

<раздел меток> ::= label <определение метки>; {<определение метки>;}

<определение метки> ::= метка

Программа

<программа> ::= [<раздел меток>] [<раздел описания констант>] [<раздел определения типов>] [<раздел описания переменных>] <раздел операторов>.

Лексический анализ

Вход лексического анализатора: последовательность литер.

Выход лексического анализатора: последовательность лексем.

Перечисление лексем

Таблица ключевых слов.

1

array

2

begin

3

const

4

do

5

else

6

end

7

goto

8

if

9

label

10

of

11

program

12

record

13

then

14

type

Таблица типов.

1

integer

2

boolean

3

real

4

complex

Таблица разделителей.

1

,

2

.

3

;

4

[

5

]

6

{

7

}

8

(

9

)

10

:

11

:=

12

..

Таблицы операций.

1

+

1

*

1

=

2

-

2

/

2

>

3

<

Данные пользователя:

Таблица меток.

1

2

...

Таблица пользовательских типов.

1

2

...

атрибуты

Таблица идентификаторов.

1

2

...

атрибуты

Таблица целых констант.

1

2

...

Таблица вещественных констант.

1

2

...

Таблица комплексных констант.

1

2

...

Таблица строк.

1

2

...

Соседние файлы в предмете Теория языков программирования