Дополненный синтаксис для целочисленнных выражений Паскаля приведен ниже.
<выражение>::= <простое выражение>
| <простое выражение><оператор сравнения><простое выражение>
<простое выражение>::= <простое выражение> <аддитивный оператор> <терм>
| <терм> | <знак> <терм>
<терм>::= <терм> <мультипликативный оператор> <множитель> | <множитель>
<множитель>::= <переменная> | <беззнаковая константа> | (выражение) | NOT <множитель>
<оператор сравнения>::= = | <> | < | <= | > | >=
<знак>::= + | -
<аддитивный оператор>::= + | - | OR
<мультипликативный оператор>::= * | DIV | MOD | AND
<переменная>::= <идентификатор переменной>
<беззнаковая константа>::= <беззнаковое число> | <идентификатор константы>
| <строка символов>
<беззнаковое число>::= <беззнаковое целое>
Значение целочисленных выражений.
Значение целочисленных выражений дается в виде следующего рекурсивного определения для состояния выполнения S:
|
|
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))
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)) (возможно переполнение)
E1 * E2(S) = (E1(S) x E2(S)) (возможно переполнение)
E1 DIV E2(S) = (E1(S) / E2(S))
E1 MOD E2(S) = (E1(S) – (E1(S) / E2(S)xE2(S)))
+E (S) = E (S)
-E (S) = - E (S)
(E) (S) = E (S)
Это определение дает значение каждого оператора. Для выражения с более чем одним оператором, значение вычисляется терм за термом, в соответствии с правилами синтаксиса Паскаля, задающими предшествование и ассоциативность.