Смекни!
smekni.com

Конвертер программы с подмножества языка Си в Паскаль с использованием LL1 метода синтаксическог (стр. 2 из 5)

Арифметические операции

Операция Действие Типы операндов Тип результата
Бинарные
+ - * / DIV MOD AND SHL SHR OR XOR Сложение Вычитание Умножение Деление Целочисленное деление Остаток от деления Арифметическое И Сдвиг влево Сдвиг вправо Арифметическое ИЛИ Исключающая дизъюнкция Целый Вещественный Целый Вещественный Целый Вещественный Целый Вещественный Целый Целый Целый Целый Целый Целый Целый Целый Вещественный Целый Вещественный Целый Вещественный Вещественный Вещественный Целый Целый Целый Целый Целый Целый Целый
Унарные
+ - NOT Сохранение знака Отрицание знака Арифметическое отрицание Целый Вещественный Целый Вещественный Целый Целый Вещественный Целый Вещественный Целый

Выражения и операции отношения.

Выражением отношения называется словосочетание языка, в котором два выражения связаны знаком операции отношения. Выражение отношения определяет истинность или ложность результата. Операции отношения выполняют сравнение двух операндов и определяют, истинно значение выражения или ложно.

В языке Паскаль операции отношения и рассмотренные ниже булевские операции более важны при написании программ, чем в других языках, так как они интенсивно используются для реализации разветвляющихся и циклических алгоритмов. В таблице 2 приведены операции отношения, допустимые в версии языка Паскаль для ПЭВМ.

Сравниваемые величины могут принадлежать к любому скалярному или перечисляемому типу данных. Результат всегда имеет булевский тип и принимает одно из двух значений: True (истина) или False (ложь).

Операции отношения.

Операция Название Выражение Результат
= <> > < >= <= in Равно Не равно Больше Меньше Больше или равно Меньше или равно Принадлежность A=B A<>B A>B A<B A>=B A<=B A in M True, если А равно В True, если А не равно В True, если А больше В True, если А меньше В True, если А больше или равно В True, если А меньше или равно В True, если А находится в списке М

Логические выражения и операции.

Результатом выполнения логического (булевского) выражения является логическое значение True или False. Операндами служат данные только булевского типа.

Простейшими видами логических выражений являются следующие:

Логическая константа;

Логическая переменная;

Элемент массива логического типа;

Логическая функция;

Выражение отношения.

Другие логические выражения строятся из вышеперечисленных путем применения логических операций и круглых скобок. Список логических операций приведен в таблице 3.

Логические операции.

Операция Действие Выражение А В Результат
Not And Or xor Логическое отрицание Логическое И Логическое ИЛИ Исключающее ИЛИ not A A and B A or B A xor B True False True True False False True True False False True True False False True False True False True False True False True False True False False True True False False False True True True False False True True False

Операция @.

С помощью операции @ можно создать указатель на переменную. В таблице 4 показаны операнд и типы результата.

Операция создания указателя.

Операция Действие Тип операнда Тип результата
@ Получение указателя Ссылка на переменную, процедуру или идентификатор функции Указатель (совместимый с nil)

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

Выражения в СИ.

Конструкции, включающие константы (литералы), переменные, знаки операций, скобки для управления порядком выполнения операций, обращения к функциям, называют выражениями.

Если в выражениях встречаются операнды различных типов, то они преобразуются к общему типу в соответствии с определенными правилами:

Переменные типа char интерпретируются как целые без знака (unsigned);

Переменные типа short автоматически преобразуются в int; если один из операндов имеет тип unsigned, то другой (другие) также преобразуется к типу unsigned и результат имеет тип unsigned;

Если один из операндов имеет тип int, то другой (другие) также преобразуется к типу int и результат имеет тип int;

Если один из операндов имеет тип char, то другой (другие) также преобразуется к типу char и результат имеет тип char;

Во время операции присваивания значения правой части преобразуются к типу левой части, который и становится типом результата;

В процессе преобразования int в char лишние 8 бит просто отбрасываются.

Кроме того, существует возможность точно указывать требуемый тип данных, к которому необходимо привести некоторую величину (в скобках перед этой величиной). Скобки и имя типа вместе образуют операцию, называемую приведением типов.

Например: z=(int)x+(int)y;

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

В языке СИ присваивание также является выражением, и значением такого выражения является величина, которая присваивается.

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

Операнд - это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.

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

Унарное выражение состоит из операнда и предшествующего ему знаку унарной операции и имеет следующий формат:

знак-унарной-операции операнд

Бинарное выражения состоит из двух операндов, разделенных знаком бинарной операции:

операнд1 знак-бинарной-операции операнд2

Тернарное выражение состоит из трех операндов, разделенных знаками тернарной операции (?) и (:), и имеет формат:

операнд1 ? операнд2 : операнд3

По количеству операндов, участвующих в операции, операции также подразделяются на унарные, бинарные и тернарные.

В языке Си имеются следующие унарные операции:

-арифметическое отрицание (отрицание и дополнение);

~ побитовое логическое отрицание (дополнение);

! логическое отрицание;

& вычисление адреса;

+ унарный плюс;

++ увеличение (инкремент);

--уменьшение (декремент);

sizeof размер .

Унарные операции выполняются справа налево.

Операции увеличения и уменьшения увеличивают или уменьшают значение операнда на единицу и могут быть записаны как справа так и слева от операнда. Если знак операции записан перед операндом (префиксная форма), то изменение операнда происходит до его использования в выражении. Если знак операции записан после операнда (постфиксная форма), то операнд вначале используется в выражении, а затем происходит его изменение.

В отличие от унарных, бинарные операции, список которых приведен в табл.7, выполняются слева направо.

Таблица 7

Знак операции Операция Группа операций
* Умножение Мультипликативные
/ Деление
% Остаток от деления
+ Сложение Аддитивные
- Вычитание
<< Сдвиг влево Операции сдвига
>> Сдвиг вправо
< Меньше Операции отношения
<= Меньше или равно
>= Больше или равно
= = Равно
!= Не равно
& Поразрядное И Поразрядные операции
| Поразрядное ИЛИ
^ Поразрядное исключающее ИЛИ
&& Логическое И Логические операции
|| Логическое ИЛИ
, Последовательное вычисление Последовательного вычисления
= Присваивание Операции присваивания
*= Умножение с присваиванием
/= Деление с присваиванием
%= Остаток от деления с присваиванием
-= Вычитание с присваиванием
+= Сложение с присваиванием
<<= Сдвиг влево с присваиванием
>>= Сдвиг вправо присваиванием
&= Поразрядное И с присваиванием
|= Поразрядное ИЛИ с присваиванием
^= Поразрядное исключающее ИЛИ с присваиванием

Мультипликативные операции