def test_Concept(self): red = Sequence.from_string("red") green = Sequence.from_string("green") blue = Sequence.from_string("blue") alphabet = Choice([red,green,blue]) lexer = lexer_factory(alphabet) def concept_translator_fun(inputtokens): result = [] for x,_ in inputtokens: if x == "red" or x == ["r","e","d"]: result.append("color red") elif x == "green" or x == ["g","r","e","e","n"]: result.append("color green") elif x == "blue" or x == ["b","l","u","e"]: result.append("color blue") else: raise Exception("%s,%s" % (x, x.__class__.__name__)) return result ct = concept_translator_fun self.assertListEqual(ct(lexer("red")), ["color red"]) self.assertListEqual(ct(lexer([x for x in "red"])), ["color red"])
def __generateStringSymbol(rightside): head, tail = rightside.split(",", 1) if head != "String": raise TypeError content = tail if len(tail) > 2 and tail[1][0] == "'" and tail[1][-1] == "'": content = tail[1][1:-1] from pydsl.grammar.PEG import Sequence return TerminalSymbol(Sequence.from_string(content))
def testCheck(self): from pydsl.grammar.PEG import Sequence from pydsl.check import SequenceChecker sequence = Sequence((String("a"), String("b"), String("c"))) checker = SequenceChecker(sequence) self.assertTrue(checker.check("abc")) self.assertTrue(checker.check([x for x in "abc"])) self.assertFalse(checker.check("abd")) self.assertFalse(checker.check(""))
def testSecondLevelGrammar(self): a = String("a") b = String("b") c = String("c") x = String("x") y = String("y") z = String("z") first_level = Choice([a, b, c]) first_levelb = Choice([x, y, z]) second_level = Sequence([a, b], base_alphabet=first_level) from pydsl.check import checker_factory checker = checker_factory(second_level) self.assertTrue(checker([a, b])) second_level_alphabet = Choice([first_level, first_levelb]) lexer = lexer_factory(second_level_alphabet, base=first_level + first_levelb) self.assertListEqual( lexer("ab"), [Token("a", first_level), Token("b", first_level)])
__all__ = ['repository', 'iclass', 'root_rule', 'rules'] rules = """digit = anything:x ?(x in '0123456789') number = <digit+>:ds -> int(ds) expr = number:left ( '+' number:right -> left + right | -> left)""" root_rule="expr" from pydsl.grammar.PEG import Sequence repository={'string':Sequence.from_string('fas')} iclass="parsley"
def testSequence(self): mygrammar = Sequence((String("a"), String("b"))) self.assertTrue(isinstance(mygrammar, Grammar))
__all__ = ['repository', 'iclass', 'root_rule', 'rules'] rules = """digit = anything:x ?(x in '0123456789') number = <digit+>:ds -> int(ds) expr = number:left ( '+' number:right -> left + right | -> left)""" root_rule = "expr" from pydsl.grammar.PEG import Sequence repository = {'string': Sequence.from_string('fas')} iclass = "parsley"