|
@@ -1,78 +0,0 @@
|
|
|
-import os
|
|
|
-import sys
|
|
|
-from codecs import open
|
|
|
-
|
|
|
-from grammar_compiler_visitor import GrammarCompilerVisitor
|
|
|
-from hutnparser import Parser
|
|
|
-from meta_grammar import Grammar
|
|
|
-
|
|
|
-
|
|
|
-def dump(obj, nested_level=0, output=sys.stdout):
|
|
|
- spacing = ' '
|
|
|
- if type(obj) == dict:
|
|
|
- print >> output, '%s{' % ((nested_level) * spacing)
|
|
|
- for k, v in obj.items():
|
|
|
- if hasattr(v, '__iter__'):
|
|
|
- print >> output, '%s%s:' % ((nested_level + 1) * spacing, k)
|
|
|
- dump(v, nested_level + 1, output)
|
|
|
- else:
|
|
|
- print >> output, '%s%s: %s' % ((nested_level + 1) * spacing, k, v)
|
|
|
- print >> output, '%s}' % (nested_level * spacing)
|
|
|
- elif type(obj) == list:
|
|
|
- print >> output, '%s[' % ((nested_level) * spacing)
|
|
|
- for v in obj:
|
|
|
- if hasattr(v, '__iter__'):
|
|
|
- dump(v, nested_level + 1, output)
|
|
|
- else:
|
|
|
- print >> output, '%s%s' % ((nested_level + 1) * spacing, v)
|
|
|
- print >> output, '%s]' % ((nested_level) * spacing)
|
|
|
- else:
|
|
|
- print >> output, '%s%s' % (nested_level * spacing, obj)
|
|
|
-
|
|
|
-
|
|
|
-def read(n, *args):
|
|
|
- CUR_PATH = os.path.split(__file__)[0]
|
|
|
- with open(os.path.join(CUR_PATH, n), *args, encoding='utf-8') as f:
|
|
|
- return f.read()
|
|
|
-
|
|
|
-def loader(inputfile = './grammars/examples/meta_grammar.g', grammarfile = './grammars/examples/meta_grammar.g'):
|
|
|
- grammar = Grammar()
|
|
|
-
|
|
|
-# out1 = open('previous.rules', 'w')
|
|
|
-# dump(grammar.rules, 0, out1)
|
|
|
-# out2 = open('previous.tokens', 'w')
|
|
|
-# dump(grammar.tokens, 0, out2)
|
|
|
-
|
|
|
- result = parser = Parser(grammar, hide_implicit = True).parse(read(grammarfile))
|
|
|
- if(not result['status'] == Parser.Constants.Success):
|
|
|
- print 'not a valid grammar!'
|
|
|
- print result
|
|
|
- return
|
|
|
-
|
|
|
- tree = result['tree']
|
|
|
- visitor = GrammarCompilerVisitor()
|
|
|
- structure = visitor.visit(tree)
|
|
|
- grammar.rules = structure['rules']
|
|
|
- grammar.tokens = structure['tokens']
|
|
|
-
|
|
|
-# out3 = open('after.rules', 'w')
|
|
|
-# dump(structure['rules'], 0, out3)
|
|
|
-# out4 = open('after.tokens', 'w')
|
|
|
-# dump(structure['tokens'], 0, out4)
|
|
|
-
|
|
|
- result = parser = Parser(grammar, hide_implicit = True).parse(read(inputfile))
|
|
|
- if(not result['status'] == Parser.Constants.Success):
|
|
|
- print 'not a valid input file!'
|
|
|
- print result
|
|
|
- return
|
|
|
-
|
|
|
- Parser.DefaultPrinter().visit(result['tree'])
|
|
|
- Parser.PrettyPrinter().visit(result['tree'])
|
|
|
-
|
|
|
-
|
|
|
-if __name__ == "__main__":
|
|
|
- if(len(sys.argv) == 3):
|
|
|
- fileName = sys.argv[1]
|
|
|
- loader(sys.argv[1], sys.argv[2])
|
|
|
- else:
|
|
|
- loader()
|