def test_fully_qualified_rule_reference(self): """ Fully-qualified rule references do not require import statements. """ grammar = Grammar("test") fully_qualified_ref = "grammars.test1.W" named_ref = NamedRuleRef(fully_qualified_ref) rule = Rule("rule", True, named_ref) grammar.add_rule(rule) expected_rule = self.grammars.test1.get_rule("W") for x in range(2): self.assertEqual(named_ref.referenced_rule, expected_rule) self.assertEqual(grammar.get_rule(fully_qualified_ref), expected_rule) self.assertEqual(grammar.find_matching_rules("w"), [rule]) # Check that the import statement is allowed. grammar.add_import(Import(fully_qualified_ref))
def main(): # Create a hidden (private) rule rule1 = HiddenRule("hello", "hello") # Create a public rule referencing rule1 rule2 = PublicRule("greet", RuleRef(rule1)) # Create a grammar and add the new rules to it grammar = Grammar("g") grammar.add_rules(rule1, rule2) # Compile the grammar using compile() print("Grammar '%s' compiles to:" % grammar.name) print(grammar.compile()) # Find rules matching 'hello' # rule2 will be found, but not rule1 because it is hidden print("Matching rule: %s" % grammar.find_matching_rules("hello")[0])
def main(): # Create a public rule with the name 'hello' and a Literal expansion # 'hello world'. rule = PublicRule("hello", Literal("hello world")) # Note that the following creates the same rule: rule = PublicRule("hello", "hello world") # Create a grammar and add the new rule to it grammar = Grammar() grammar.add_rule(rule) # Compile the grammar using compile() # compile_to_file(file_path) may be used to write a compiled grammar to # a file instead. # Compilation is not required for finding matching rules. print(grammar.compile()) # Find rules in the grammar that match 'hello world'. matching = grammar.find_matching_rules("hello world") print("Matching: %s" % matching[0])