lex を試す。トークンのアトリビュート
「トークンオブジェクトに追加的なアトリビュートを付加しないこと」というのは分かるのだが、「それ故、貴方が付加するその他のあらゆるアトリビュートはアクセスできなくなっている」という部分が良く分からなかった。「yacc.pyモジュールは」となっているので、yacc の部分を使ったら分かるのかもしれない。
#!/usr/bin/env python import ply.lex as lex tokens = ( 'ID', ) def t_ID(t): r'[a-zA-Z_][a-zA-Z_0-9]*' t.hoge = t.value.upper() print t.hoge return t t_ignore = ' \t' def t_error(t): print "Illegal character '%s'" % t.value[0] t.lexer.skip(1) lex.lex() lex.input("if then end") while 1: tok = lex.token() if not tok: break # No more input print tok
で、
IF LexToken(ID,'if',1,0) THEN LexToken(ID,'then',1,3) END LexToken(ID,'end',1,8)