sly icon indicating copy to clipboard operation
sly copied to clipboard

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

Open alingse opened this issue 3 years ago • 2 comments

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 avatar Sep 04 '21 15:09 alingse

😂 final, i use python script to generate the code

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

🙏

alingse avatar Sep 04 '21 15:09 alingse

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.

dabeaz avatar Sep 04 '21 15:09 dabeaz