lex を試す。トークンのルールを関数で

#!/usr/bin/env python

import ply.lex as lex

tokens = (
  'NUMBER',
  'PLUS',
)

def t_NUMBER(t):
    r'\d+'
    try:
        t.value = int(t.value)
    except ValueError:
        print "Number %s is too large!" % t.value
        t.value = 0
    return t

t_PLUS   = r'\+'
t_ignore = ' \t'

def t_error(t):
    print "Illegal character '%s'" % t.value[0]
    t.lexer.skip(1)

lex.lex()
lex.input("1 + 2")

while 1:
    tok = lex.token()
    if not tok: break      # No more input
    print tok

で、

LexToken(NUMBER,1,1,0)
LexToken(PLUS,'+',1,2)
LexToken(NUMBER,2,1,4)

正規表現ルールは関数のドキュメンテーション文字列として明示されている」ということは、ドキュメンテーション文字列を引き出して使っているのか?(<=ソース見ろ)

「dir(t)」したらこんな感じ

['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 'lexer', 'lexpos', 'lineno', 'skip', 'type', 'value']