Хелпикс

Главная

Контакты

Случайная статья





Правила синтаксиса и Значение.



16.1.2. Правила синтаксиса и Значение.

 

Синтаксические правила для выражений с операциями над множествами приведены ниже.

 

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

| <простое выражение> <оператор сравнения> <простое выражение>

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

| <терм> | <знак> <терм>

<терм> ::= <терм> <мультипликативный оператор> <множитель> | <множитель>

<множитель> ::= <идентификатор> | <вызов функции>

|<беззнаковая константа> | (<выражение>)

| NOT <множитель> | <выражение множества>

<оператор сравнения> ::= = | <> | < | <= | > | >= | IN

<знак> ::= + | –

<аддитивный оператор> ::= + | – | OR

<мультипликативный оператор> ::= * | DIV | MOD | AND

<выражение множества> ::= [<описатели элементов>]

<описатели элементов> ::= <описатели элементов>, <описатель элементов> |

<описатель элементов> ::= <выражение> | выражение .. выражение

 

Значение каждой операции между операндами-множествами и операндом-элементом может быть представлено в терминах обычных математических операторов

 

E1 = E2 (s) = (E1 (s) = E2 (s))

E1 <> E2 (s) = (E1 (s) ¹ E2 (s))

E1 <= E2 (s) = (E1 (s) Í E2 (s))

E1 >= E2 (s) = (E1 (s) Ê E2 (s))

Me IN E2 (s) = (E1 (s) Î E2 (s))

E1 + E2 (s) = (E1 (s) È E2 (s))

E1 – E2 (s) = (E1 (s) – E2 (s))

E1 * E2 (s) = (E1 (s) Ç E2 (s))

[Me] (s) = {Me (s)}

(E) (s) = E (s)

 

для любого состояния s. Для более сложных выражений порядок выполнения операций задается правилами синтаксиса, ассоциативности и предшествования.

 

 

16.2. Файлы.

 

Файлы являются упорядоченными последовательностями значений. Операторы WRITE добавляют значения к существующей последовательности (всегда в конец), операторы READ могут получать значения в той же последовательности, в которой они были ранее считаны. Значения не ограничены типом CHAR как в текстовых файлах, но могут быть представлены почти любым типом Паскаля. Буферные переменные и операторы PUT/GET предлагают дополнительные способы управления файлами.

 

Дополнительно к текстовым файлам, Паскаль позволяет нам определять новые файловые типы с компонентами любого ранее объявленного типа за исключением тех агрегатных типов, в которые входят файлы. Типичное объявление файлового типа:

VAR

IntFile: FILE OF INTEGER;

 

Значение IntFile является последовательностью значений типа INTEGER – только значения типа INTEGER могут быть считаны из или записаны в такой файл. Файловые переменные – единственный тип переменных Паскаля, которые не могут участвовать в операторах присваивания. Все файловые значения должны быть созданы с использованием преопределенных операций.

Объявление файловой переменной неявно объявляет буферную переменную, записываемую как файловый идентификатор, за которым следует стрелка вверх (например, IntFile^) того же типа, что и компоненты файла. Когда мы читаем файл, IntFIle^ содержит значение доступное для считывания. Новые элементы файла добавляются в файл заполнением буферной переменной и записью ее содержимого. Буферные переменные могут появляться везде, где появляются другие переменные. Например:

3 + IntFile^ * 7

Однако, буферные переменные не являются идентификаторами, поскольку завершаются на символ, который не является символом или цифрой. Таким образом, мы должны исправить наши синтаксические правила, заменив <идентификатор> в правой части правила для <множителя> на <ссылка на переменную>, которая покрывает идентификаторы и буферные переменные.

 

<множитель> ::= <ссылка на переменную> | <вызов функции>

|<беззнаковая константа> | (<выражение>)

| NOT <множитель> | <выражение множества>

 

<ссылка на переменную> ::= <идентификатор переменной> | <буферная переменная>

<буферная переменная> ::= <файловая переменная>^

<файловая переменная> ::= <ссылка на переменную>

 

Хотя синтаксические правила показывают, что идентификатор, за которым следует некоторое количество символов ^ является файловой переменной, фактически только один символ ^ может появляться .

Значения текстовых файлов – 3-списки. Первые два элемента которых строки будущего и прошлого файла. Для произвольных файлов значения прошлого и будущего – это списки элементов типа которым объявлен тип. Третий элемент – индикатор режима, который показывает, открыт ли файл для чтения или записи.

Поскольку объявление файловой переменной вводит буферную переменную семантика операторов объявления для файлов должна быть изменена для того, чтобы учесть буферную переменную.

VAR F: FILE OF TypeT (s) = s È {F <?, ?, ?>}

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.