Exemple #1
0
def unparsing_unsupported(language_name: str, syntax, comment: str = None, error: bool = True):
    unparsed = 'invalid'
    try:
        unparsed = '"""{}"""'.format(horast.unparse(syntax).strip())
    except AttributeError:
        pass
    if comment is not None:
        comment = ' ' + comment
    _LOG.error('unparsing %s%s like """%s""" (%s in Python) is unsupported for %s',
               syntax.__class__.__name__, comment, horast.dump(syntax), unparsed, language_name)
    if error:
        raise SyntaxError(
            'unparsing {}{} like """{}""" ({} in Python) is unsupported for {}'.format(
                syntax.__class__.__name__, comment, horast.dump(syntax), unparsed, language_name))
 def test_auto_parser(self):
     for language_codename, paths in EXAMPLES_FILES.items():
         language_name = EXAMPLES_LANGS_NAMES[language_codename]
         if language_name in NOT_PARSED_LANGS:
             continue
         language = Language.find(language_name)
         self.assertIsInstance(language, Language, msg=(language_codename, language_name))
         auto_parser = GeneralizingAutoParser(language)
         reader = CodeReader()
         for path in paths:
             code = reader.read_file(path)
             with self.subTest(language_name=language_name, language=language):
                 pair1 = auto_parser.parse_and_generalize(code, path)
                 pair2 = auto_parser.parse_and_generalize_file(path)
                 self.assertEqual(horast.dump(pair1), horast.dump(pair2))
Exemple #3
0
 def _BinOp(self, binop):
     if binop.op.__class__.__name__ in {'Pow'}:
         # TODO: implement Pow through pow(n, p) function
         raise NotImplementedError('not yet implemented: {}'.format(horast.dump(binop)))
     if binop.op.__class__.__name__ in self.binop_unsupported:
         self._unsupported_syntax(binop)
     super()._BinOp(binop)
Exemple #4
0
 def _BinOp(self, binop):
     if binop.op.__class__.__name__ in {
             'Mod', 'LShift', 'RShift', 'BitOr', 'BitXor', 'BitAnd', 'MatMult'}:
         # TODO: implement Mod through MODULO(n, p) intrinsic
         # TODO: implement LShift through LSHIFT(n, p) intrinsic
         # TODO: implement RShift through RSHIFT(n, p) intrinsic
         # TODO: implement BitOr through IOR(k, j) intrinsic
         # TODO: implement BitXor through IEOR(k, j) intrinsic
         # TODO: implement BitAnd through IAND(k, j) intrinsic
         # TODO: implement MatMult through MATMUL(m1, m2) intrinsic
         raise NotImplementedError('not yet implemented: {}'.format(horast.dump(binop)))
     super()._BinOp(binop)