I’m trying to generate all terminal strings from a given file up to a certain length. So for instance, if you have something like
A = A B
A = B
B = 0
B = 1
Then you would get something like
0
1
0 0
0 1
1 0
1 1
This is something that I thought wouldn’t be overly difficult but I’m getting stuck. I can currently read the values and append them to a dictionary, with the rules being stored as a list like so:
{'B': [['0'], ['1']], 'A': [['A', 'B'], ['B']]}
It would seem like what you’d want to do is start with one of the non-terminal symbols (ex A or B) and then iterate over each rule. If the symbol in the rule isn’t a non-terminal symbol, you’d print it or save it, and if it is a non-terminal symbol, you’d replace it with a rule, and then check it again. I’m stumped on how to go about doing this in Python- I haven’t done much in it. Any help would be much appreciated!
Pseudocode:
(Note: “non-terminal single-evaluated variant” means that if a string were “AAB”, you’d evaluate 1 of the A’s, but not the other (and not the B, since it has no non-terminal options). Then you’d evaluate the other A in a separate path – you’d wind up pushing two things onto the stack.)
Note that in Python you can simply use appending/removing from the end of a list for a stack, and a
set()for a set.