Skip to content

Instantly share code, notes, and snippets.

@mkroutikov
Created November 21, 2018 22:30
Show Gist options
  • Save mkroutikov/8404626236e61e309d2b694c7a8bfeb1 to your computer and use it in GitHub Desktop.
Save mkroutikov/8404626236e61e309d2b694c7a8bfeb1 to your computer and use it in GitHub Desktop.
Generates Toy language sentences
import random
class Rule:
def __init__(self, name):
self.name = name
GRAMMAR = {
'op': ['+', '-', '/', '%', '*'],
'var': ['x', 'y', 'z', '1', '2', '3'],
'expr': [
Rule('var'),
(Rule('var'), Rule('op'), Rule('expr')),
('(', Rule('expr'), ')')
]
}
def generate(rule):
if type(rule) is str:
yield rule
return
if type(rule) is Rule:
rules = GRAMMAR[rule.name]
sample = rules[random.randint(0, len(rules)-1)]
yield from generate(sample)
return
for x in rule:
yield from generate(x)
if __name__ == '__main__':
for _ in range(10000):
print( ' '.join(generate(Rule('expr'))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment