Extendable Enum like Type?

Ethan Furman ethan at stoneleaf.us
Mon Jul 22 09:41:33 EDT 2019


On 07/19/2019 01:23 AM, Antoon Pardon wrote:

> I don't seem to have made myself clear. The grammar with its Terminals
> and NonTerminals is read in from a file. The program doesn't know what
> they will be.
> 
> For the moment what I am thinking about is something as follows:
> 
> grammar = LoadGrammer(GrammarFile)
> EnumList = ['class NonTerminal(Enum):\n']
> for Index, NonTerminal in enumerate(grammar.NonTerminals):
>      EnumList.append('    %s = %d\n' % (NonTerminal, Index))
> exec(''.join(EnumList), ..., ...)
> 
> The problem with this approach is that I can't use these values until
> the whole grammer is loaded. I would prefer some way to add values
> during the loading of the grammar.

Ah, you want `extend_enum` from the aenum library:

class NonTerminal(Enum):
     pass

while reading_grammar:
     non_terminal = ....
     index = ....
     extend_enum(NonTerminal, non_terminal, index)


See also:
- https://stackoverflow.com/a/33680929/208880
- https://stackoverflow.com/a/35899963/208880
- https://stackoverflow.com/a/36918171/208880
- https://stackoverflow.com/a/43004033/208880

--
~Ethan~



More information about the Python-list mailing list