字句解析:トークンの選ばれ方

%%
parser Test:

    token END: "$"
    token A:   "a"
    token AA:  "aa"

    rule start: A A END {{ print "*a a*" }}
              | AA  END {{ print "*aa*" }}

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

で、

>>> aa
*aa*

長い方

%%
parser Test:

    token END: "$"
    token A:   "a"
    token ANY: "\w"

    rule start: A    END {{ print "*a*" }}
              | ANY  END {{ print "*any*" }}

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

で、

>>> a
*a*

同じ長さの場合、上に書いてある方

%%
parser Test:

    token END: "$"
    token ANY: "\w"
    token A:   "a"

    rule start: A    END {{ print "*a*" }}
              | ANY  END {{ print "*any*" }}

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

で、

>>> a
*any*

同じ長さの場合、上に書いてある方