dabeaz / sly

Sly Lex Yacc
Other
816 stars 107 forks source link

"AttributeError: Name token redefined" when use loop to set NAME[token] = A #78

Open alingse opened 3 years ago

alingse commented 3 years ago

i want use sly to parse "thrift" file (see https://github.com/alingse/thrift-parser/blob/master/simple.py )

and want to set several base_type to IDENTIFIER, but got AttributeError

    types = r'bool|byte|i8|i16|i32|i64|double|string|binary|slist'.split('|')
    for token in types:
        IDENTIFIER[token] = BASE_TYPE

see this simplify code https://github.com/alingse/thrift-parser/blob/master/demo3.py#L14-L16

i know this can be rewritten to

IDENTIFIER["bool"] = BASE_TYPE
IDENTIFIER["byte"] = BASE_TYPE
IDENTIFIER["i8"] = BASE_TYPE
IDENTIFIER["i16"] = BASE_TYPE
...

i want to known that is there any simple way to do this ?

like ?

IDENTIFIER[tuple("bool", "byte")] = BASE_TYPE

or is there some way to statement the reversed keywords for all identifier ( IDENTIFIER = r'[a-zA-Z][a-zA-Z0-9.]*' )

alingse commented 3 years ago

😂 final, i use python script to generate the code

In [3]: for token in REVERSED_KEYWORD_LIST:
   ...:     print("IDENTIFIER['{}'] = REVERSED_KEYWORD".format(token))

🙏

dabeaz commented 3 years ago

I'm looking at the SLY source and an "easy" workaround doesn't seem possible right now. However, I've been doing a bit of recent work on SLY. I'll look into this further.