lex を試す。複数の lexer
複数の lexer が作れるらしいが、同一ファイル内に書くと
うまくいかなかった。ので、ファイルを分けて書く。
lexer 1
import ply.lex as lex tokens = ( 'A', 'PLUS', ) t_A = r'a' t_PLUS = r'\+' def t_error(t): print "Illegal character '%s'" % t.value[0] t.lexer.skip(1) lexer = lex.lex()
lexer 2
import ply.lex as lex tokens = ( 'B', 'PLUS', ) t_B = r'b' t_PLUS = r'\+' def t_error(t): print "Illegal character '%s'" % t.value[0] t.lexer.skip(1) lexer = lex.lex()
呼び出し
#!/usr/bin/env python import m20080309_ply01 import m20080309_ply02 def lex(lexer, data): lexer.input(data) while 1: tok = lexer.token() if not tok: break # No more input print tok lexer1 = m20080309_ply01.lexer lexer2 = m20080309_ply02.lexer lex(lexer1, "a+a") lex(lexer2, "b+b")
で、
LexToken(A,'a',1,0) LexToken(PLUS,'+',1,1) LexToken(A,'a',1,2) LexToken(B,'b',1,0) LexToken(PLUS,'+',1,1) LexToken(B,'b',1,2)