字句解析

正規表現でそのままパターンマッチしているだけみたいなので、普通に色々書けそう

%%
parser Test:

    token END: "$"
    token A:   "a"
    token ABC: "(a|b|c)"
    token AAA: "a+"
    token NUM: "\d+"
    token VAR: "[a-zA-Z_]+"

    rule start: A   END {{ print "*a*" }}
              | ABC END {{ print "*abc*" }}
              | AAA END {{ print "*aaa*" }}
              | NUM END {{ print "*num*" }}
              | VAR END {{ print "*var*" }}

%%
if __name__=='__main__':
    while 1:
        try: s = raw_input('>>> ')
        except EOFError: break
        if not s.strip(): break
        parse('start', s)
    print 'Bye.'

で、

>>> a
*a*
>>> b
*abc*
>>> aaaa
*aaa*
>>> 012
*num*
>>> abc
*var*