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']