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

V = { [a-z], [0-9], +, -, *, /, **, ), ( }

Алгебраические выражения включают в себя все арифметические выражения, а также описания алгебраических функций.
Логическое выражение - это объединение алгебраических выражений и логических функций.
В арифметических выраженниях существует два типа операций.
Одноместные операции (операции с одним операндом) и двуместные операции (оперaции с двумя операндами).

-B + А * С
"-" - одноместная операция, "*" - двуместная.

Для получения алгебраических и арифметических выражений используются стековые методы трансляции. Для этого применяются
два стека и т.н. таблица переходов. Таблица переходов определяет старшинство выполняемых операций и связывает последовательность действий.
Используемые стеки:
  1. стек транслятора (внутреннее представление);
  2. стек для исполнения

Правила получения польской записи

1. Идентификаторы польской записи следуют в том же порядке, что и в инфиксной записи.
(a+b)/c
ab+c/ - постфиксная запись;
+ab/c - инфиксная запись.

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

3. Операторы располагаются непосредственно за своими операндами.

<идентификатор>
<операнд>
<оператор>
<оператор> ::= <идетификатор> | <операнд>
<операнд><оператор>;

При стековой трансляции выражений выполняются два типа команд транслятора:

Рис. 1.  

1. ki - взять операнд с именем i и отправить его на вершину стека, перейти к просмотру следующего символа;
2. - взять два верхних операнда из стека, произвести над ними операцию ξ и новый операнд (результат) поместить на вершину стека
η - символ на вершине стека транслятора;
ξ - символ, который принимаетсчя транслятором.

При выполнении этих команд возможно четыре действия транслятора:
I - отправить пришедший символ на вершину стека и читать следующий символ;
II - выполнить операцию над двумя операндами, результат занести на вершину стека и читать следующий символ;
III - при прочтении символа ')' удалить ')' с вершины стека и читать следующий символ (действие удаления скобки);
IV - взять два операнда, выполить над ними команду kξ и повторить чтение входного символа.

Рис. 2.  

На вершине стека не может быть символа ')'.
λ - пустой символ (пробел, пустота на вершине стека, заключающий символ).
Ош - ошибка

Пример:

(a * b + c * d) / (A - d) + b * c

Таблица 1    
T ξ действие команда
λ(I-
(a-ka
(*I-
(*b-kb
(*+IVka
(+(повтор)I-
(+c-kc
(+*I-
(+*d-kd
(+*)IVk*
(+)(повтор)IVk+
()(повтор)III-
λ/I-
/(I-
/(A-kA
/(-I-
/(-d-kd
/(-)IVk-
/()(повтор)III-
/+IVk/
λ+(повтор)I-
+b-kb
+*I-
+*c-kc
+*λIVk*
+λ(повтор)IVk+
λλ(повтор)k-





ab*cd*+Ad-/bc*+

Представление арифметических, алгебраических и логических выражений в виде тетрад.

Тетрады - представление выражений в виде:
1. для бинарных операций
<оператор><операнд1><операнд2><результат>

A * B
* A B T, где Т - результат

2. для унарных операций:
<оператор><операнд>< ><результат>

-B + C * D
-B _ T1
*C D T2
+ T1 T2 T3

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