<ПРЕД Задача:
СЛЕД>
Задачу решили 165 пользователей: ...
 < 
 < 
 < 
 < 
 < 
 < 
 < 
 < 
 < 
 < 

Arithmetica v1.3

Time limit = 5 секунд

Вы — главный программист Walfram Research Corp. Ваша задача — написать программу Arithmetica 1.3 В этой версии предполагается реализовать функции без параметров. Функции с параметрами будут реализованы только в версии 1.5.

Arithmetica 1.3 должна работать следующим образом:

Вход Первая строчка входа содержит число N( N ≤ 100) — количество последующих строчек. Далее следует N строчек. Каждая строчка — это команда. Команда — это либо определение функции, либо идентификатор. Идентификатор (имя функции) состоит из латинских букв больших или маленьких, его длина меньше 21.

Определение функции — это идентификатор, далее два символа ':=', и далее выражение. Выражение — это арифметическое выражение над идентификаторами и целыми числами, то есть слово в алфавите B = {+,-,*,0-9, a-z,A-Z,(,)}. Все операции имеют одинаковый приоритет и вычисляются слева направо (если нет скобок).

alpha	   ::= a-zA-Z
numeric	   ::= 0-9
command    ::= identifier | definition
definition ::= identifier ':=' expression
identifier ::= alpha +
expression ::= '(' expression ')' | integer_number | identifier | expression ('+' | '*' | '-') expression
integer_number ::= '-' ? numeric+

Когда команда является определением, нужно запомнить это определение и затем использовать его, если понадобится.

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

Определения какого-либо идентфикатора может встречаться только один раз (либо вообще не встречаться).

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

Длина каждой строчки входа меньше 1000.

Выход Для каждой строчки содержащей идентификатор вывести строчку равную численному значению этой функции. Если численное значение этой функции по каким либо причинам не вычисляется (например у него просто нет определения или нет определения у функции на которую она ссылается или ..), то выведите строчку со словом 'error'.

Известно, что все числа и значения функций по модулю меньше 230

Вход#1
2
a:=1+2*3
a
Выход#1
9


Вход#2
2
a:=b-b
a
Выход#2
error

Вход#3
3
b:=a*2
a:=(1+3)*3
b
Выход#3
24

Вход#4
8
b:=a*2
a:=(1+3)*3
c:=a+b+d
d:=a+c
e:=(b-a)
b
c
e
Выход#4
24
error
12

Автор:
Ворожцов Артем
18 мая 2003

<ПРЕД | Вернуться к списку задач | Искать сообщения в форуме | СЛЕД>


© acm.mipt DevGroup
The page was generated in 200ms

SW soft NIX
ID = 3.235.30.155