Read an expression from a sequence of tokens.
(tokens)
| 66 | return s.replace('(',' ( ').replace(')',' ) ').split() |
| 67 | |
| 68 | def read_from_tokens(tokens): |
| 69 | "Read an expression from a sequence of tokens." |
| 70 | if len(tokens) == 0: |
| 71 | raise SyntaxError('unexpected EOF while reading') |
| 72 | token = tokens.pop(0) |
| 73 | if '(' == token: |
| 74 | L = [] |
| 75 | while tokens[0] != ')': |
| 76 | L.append(read_from_tokens(tokens)) |
| 77 | tokens.pop(0) # pop off ')' |
| 78 | return L |
| 79 | elif ')' == token: |
| 80 | raise SyntaxError('unexpected )') |
| 81 | else: |
| 82 | return atom(token) |
| 83 | |
| 84 | def atom(token): |
| 85 | "Numbers become numbers; every other token is a symbol." |