File: stage

package info (click to toggle)
python-parsley 1.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,048 kB
  • sloc: python: 9,897; makefile: 127
file content (63 lines) | stat: -rwxr-xr-x 1,746 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python
# -*- mode: python -*-
import sys
import os
import glob
import shutil
from ometa.runtime import ParseError
from ometa.grammar import OMeta, TreeTransformerGrammar
from ometa.builder import writePython


def main():
    bin_dir = os.path.dirname(os.path.realpath(__file__))
    parsley_dir = os.path.split(bin_dir)[0]
    stage_dir = os.path.join(parsley_dir, 'stage')
    sys.path.append(parsley_dir)

    if os.path.exists(stage_dir):
        print "Removing stage dir"
        shutil.rmtree(stage_dir)

    os.mkdir(stage_dir)
    stage_pkg(parsley_dir, stage_dir, 'ometa')
    stage_pkg(parsley_dir, stage_dir, 'terml')


def stage_pkg(parsley_dir, stage_dir, pkg):
    print "\nCopying", pkg
    stage_pkg_dir = os.path.join(stage_dir, pkg)
    stage_gen_dir = os.path.join(stage_pkg_dir, '_generated')
    pkg_dir = os.path.join(parsley_dir, pkg)

    shutil.copytree(pkg_dir, stage_pkg_dir,
                    ignore=lambda src, names: [n for n in names if n.endswith('pyc')])
    for filename in glob.glob(pkg_dir + "/*.parsley"):
        grammar = open(filename).read()
        grammarname = os.path.split(filename)[1].split('.')[0]
        pyfn = os.path.join(stage_gen_dir, grammarname + '.py')
        print "{src:38} => {dst}".format(src=os.path.relpath(filename, parsley_dir),
                                         dst=os.path.relpath(pyfn, parsley_dir))
        if grammar.startswith('#TreeTransformer'):
            g = TreeTransformerGrammar(grammar)
        else:
            g = OMeta(grammar)
        tree = g.parseGrammar(grammarname)
        source = writePython(tree, grammar)
        pythonFile = open(pyfn, 'w')
        pythonFile.write(source)


if __name__ == '__main__':
    main()