def identifier(): whitespace() not_followed_by(p(choice, *[p(reserved, rw) for rw in reserved_words])) first = identifier_char1() commit() rest = many(identifier_char) name = u''.join([first] + rest) return ('ident', name)
def operator(): whitespace() not_followed_by(p(choice, *[p(reserved_op, op) for op in reserved_operators])) name = u''.join(many1(operator_char)) return ('op', name)
def reserved(name): assert name in reserved_words whitespace() string(name) not_followed_by(identifier_char) return name
def reserved_op(name): assert name in reserved_operators whitespace() string(name) not_followed_by(operator_char) return name