長すぎるといわれたので 2回にわける。

class ParsingError(ValueError): pass

TOKEN_NAME = {
T_NONE:"?", T_FLOAT:"float", T_INT:"integer", T_IDENT:"identifier",
T_PAREN_BEGIN:"'('", T_PAREN_END:"')'"
}

def parse(tokens):
vars = {}
name = None
args = []
try:
while True:
(t,arg1) = tokens.next()
if t != T_IDENT:
raise ParsingError("Identifier expected: got %s: %r" % (TOKEN_NAME(t), arg1))
name = arg1
(t,arg1) = tokens.next()
if t != T_PAREN_BEGIN:
raise ParsingError("Open-parenthesis expected: got %s: %r" % (TOKEN_NAME(t), arg1))
args = []
while True:

(つづく)