def testLogicalExpression(self): repository = {'TrueFalse':load_bnf_file("pydsl/contrib/grammar/TrueFalse.bnf")} productionrulesetlogical = load_bnf_file("pydsl/contrib/grammar/LogicalExpression.bnf", repository) parser = BacktracingErrorRecursiveDescentParser(productionrulesetlogical) tokens = [x[0] for x in lex(productionrulesetlogical.alphabet, ascii_encoding, "True&&False")] result = parser.get_trees(tokens) self.assertTrue(result) result = parser.get_trees("True&|False") self.assertFalse(result)
def testHTMLTable(self): repository = {'integer':RegularExpression("^[0123456789]*$")} productionrulesetlogical = load_bnf_file("pydsl/contrib/grammar/TrueHTMLTable.bnf", repository) parser = BacktracingErrorRecursiveDescentParser(productionrulesetlogical) lexed = lex(productionrulesetlogical.alphabet, ascii_encoding, "<table><tr><td>1</td></tr></table>") self.assertTrue(lexed) result = parser.get_trees(lexed) self.assertTrue(result) lexed = [x for x in lex(productionrulesetlogical.alphabet, ascii_encoding, "<table><td>1</td></tr></table>")] result = parser.get_trees(lexed) self.assertFalse(result)
class BNFChecker(Checker): """Calls another program to perform checking. Args are always file names""" def __init__(self, bnf, parser = None): Checker.__init__(self) self.gd = bnf parser = bnf.options.get("parser", parser) if parser in ("descent", "auto", "default", None): from pydsl.parser.backtracing import BacktracingErrorRecursiveDescentParser self.__parser = BacktracingErrorRecursiveDescentParser(bnf) else: raise ValueError("Unknown parser : " + parser) def check(self, data): if isinstance(data, str): from pydsl.token import PositionToken from pydsl.encoding import ascii_encoding data = [PositionToken(x, ascii_encoding, i, i+1) for i,x in enumerate(data)] if not isinstance(data, Iterable): raise TypeError(data) if not all(check(self.gd.alphabet, [x]) for x in data): LOG.warning("Invalid input: %s,%s" % (self.gd.alphabet, data)) return False try: return len(self.__parser.get_trees(data)) > 0 except IndexError: return False
class BNFChecker(Checker): """Calls another program to perform checking. Args are always file names""" def __init__(self, bnf, parser=None): Checker.__init__(self) self.gd = bnf parser = bnf.options.get("parser", parser) if parser in ("descent", "auto", "default", None): from pydsl.parser.backtracing import BacktracingErrorRecursiveDescentParser self.__parser = BacktracingErrorRecursiveDescentParser(bnf) else: raise ValueError("Unknown parser : " + parser) def check(self, data): if isinstance(data, str): from pydsl.token import PositionToken from pydsl.encoding import ascii_encoding data = [ PositionToken(x, ascii_encoding, i, i + 1) for i, x in enumerate(data) ] if not isinstance(data, Iterable): raise TypeError(data) if not all(check(self.gd.alphabet, [x]) for x in data): LOG.warning("Invalid input: %s,%s" % (self.gd.alphabet, data)) return False try: return len(self.__parser.get_trees(data)) > 0 except IndexError: return False
def testLogicalExpression(self): repository = { 'TrueFalse': load_bnf_file("pydsl/contrib/grammar/TrueFalse.bnf") } productionrulesetlogical = load_bnf_file( "pydsl/contrib/grammar/LogicalExpression.bnf", repository) parser = BacktracingErrorRecursiveDescentParser( productionrulesetlogical) tokens = [ x[0] for x in lex(productionrulesetlogical.alphabet, ascii_encoding, "True&&False") ] result = parser.get_trees(tokens) self.assertTrue(result) result = parser.get_trees("True&|False") self.assertFalse(result)
def testHTMLTable(self): repository = {'integer': RegularExpression("^[0123456789]*$")} productionrulesetlogical = load_bnf_file( "pydsl/contrib/grammar/TrueHTMLTable.bnf", repository) parser = BacktracingErrorRecursiveDescentParser( productionrulesetlogical) lexed = lex(productionrulesetlogical.alphabet, ascii_encoding, "<table><tr><td>1</td></tr></table>") self.assertTrue(lexed) result = parser.get_trees(lexed) self.assertTrue(result) lexed = [ x for x in lex(productionrulesetlogical.alphabet, ascii_encoding, "<table><td>1</td></tr></table>") ] result = parser.get_trees(lexed) self.assertFalse(result)
def testLogicalExp(self): repository = {'TrueFalse':load_bnf_file("pydsl/contrib/grammar/TrueFalse.bnf")} productionrulesetlogical = load_bnf_file("pydsl/contrib/grammar/LogicalExpression.bnf", repository) parser = BacktracingErrorRecursiveDescentParser(productionrulesetlogical) tokens = [x for x in lex(repository['TrueFalse'].alphabet, ascii_encoding, self.tokelist5)] self.assertEqual(len(tokens), 1) #tokens = [x[0] for x in lex(productionrulesetlogical.alphabet, Encoding('ascii'), tokens)] #FIXME tokens = [Token('True', repository['TrueFalse'])] result = parser.get_trees(tokens) self.assertTrue(result)
def testTrueFalse(self): productionrulesetlogical = load_bnf_file( "pydsl/contrib/grammar/TrueFalse.bnf") parser = BacktracingErrorRecursiveDescentParser( productionrulesetlogical) tokens = [ x for x in lex(productionrulesetlogical.alphabet, ascii_encoding, self.tokelist5) ] result = parser.get_trees(tokens) self.assertTrue(result)
def testLogicalExp(self): repository = { 'TrueFalse': load_bnf_file("pydsl/contrib/grammar/TrueFalse.bnf") } productionrulesetlogical = load_bnf_file( "pydsl/contrib/grammar/LogicalExpression.bnf", repository) parser = BacktracingErrorRecursiveDescentParser( productionrulesetlogical) tokens = [ x for x in lex(repository['TrueFalse'].alphabet, ascii_encoding, self.tokelist5) ] self.assertEqual(len(tokens), 1) #tokens = [x[0] for x in lex(productionrulesetlogical.alphabet, Encoding('ascii'), tokens)] #FIXME tokens = [Token('True', repository['TrueFalse'])] result = parser.get_trees(tokens) self.assertTrue(result)
class BNFChecker(Checker): """Calls another program to perform checking. Args are always file names""" def __init__(self, bnf, parser = None): Checker.__init__(self) self.gd = bnf parser = bnf.options.get("parser",parser) if parser in ("descent", "auto", "default", None): from pydsl.parser.backtracing import BacktracingErrorRecursiveDescentParser self.__parser = BacktracingErrorRecursiveDescentParser(bnf) else: raise ValueError("Unknown parser : " + parser) def check(self, data): for element in data: if not check(self.gd.alphabet, element): LOG.warning("Invalid input: %s,%s" % (self.gd.alphabet, element)) return False try: return len(self.__parser.get_trees(data)) > 0 except IndexError: return False
def testTrueFalse(self): productionrulesetlogical = load_bnf_file("pydsl/contrib/grammar/TrueFalse.bnf") parser = BacktracingErrorRecursiveDescentParser(productionrulesetlogical) tokens = [x for x in lex(productionrulesetlogical.alphabet, ascii_encoding, self.tokelist5)] result = parser.get_trees(tokens) self.assertTrue(result)