コード例 #1
0
 def test_parse_atoms(self) -> None:
     self.assertEqual(sexp.parse("hi"), [SSym("hi")])
     self.assertEqual(sexp.parse("hi hey hoi"), [
         SSym("hi"),
         SSym("hey"),
         SSym("hoi"),
     ])
     self.assertEqual(sexp.parse("42 foo"), [SNum(42), SSym("foo")])
コード例 #2
0
ファイル: tests.py プロジェクト: fisher2015/iterlib
 def test_threadLast(self):
     self.assertEqual(sexp.parse("(->> a b )"), ['b', 'a'])
     self.assertEqual(sexp.parse("(->> a b c )"), ['c', ['b', 'a']])
     self.assertEqual(sexp.parse("(->> (a) (b) (c ))"), ['c', ['b', ['a']]])
     self.assertEqual(sexp.parse("(->> (a) (b c) (d ))"),
                      ['d', ['b', 'c', ['a']]])
     self.assertEqual(sexp.parse("(->> a (b) (c) (->> d e f ))"),
                      ['f', ['e', 'd'], ['c', ['b', 'a']]])
コード例 #3
0
 def test_tail_call_in_begin(self) -> None:
     prog = sexp.parse(
         '(define (vacuous-tail) (begin 42 43 (vacuous-tail)))')
     self.finder.visit(prog)
     self.assertEqual(1, len(self.finder.tail_calls))
     self.assert_symbol_in_tail_calls(sexp.SSym('vacuous-tail'),
                                      self.finder.tail_calls)
コード例 #4
0
 def test_tail_call_in_conditional_both_branches(self) -> None:
     prog = sexp.parse(
         '(define (vacuous-tail) (if true (vacuous-tail) (vacuous-tail)))')
     self.finder.visit(prog)
     self.assertEqual(2, len(self.finder.tail_calls))
     self.assert_symbol_in_tail_calls(sexp.SSym('vacuous-tail'),
                                      self.finder.tail_calls)
コード例 #5
0
ファイル: libparser.py プロジェクト: hacxman/clustergen
    def parse_file(self, filename):
        #print filename,
        sys.stdout.write('.')
        sys.stdout.flush()
        with open(filename) as fin:
            footprint = None
            import sexp
            exp = sexp.parse(fin.read())
            for e in exp:
                #print e
                if e[0][0] == 'module':
                    name = e[1][0]
                    #print name,
                    footprint = Footprint(name=name)
                    footprint.struct = e
                    self.footprints[name] = footprint

                    for i in e[2:]:
                        if i[0][0] == 'pad':
                            try:
                                footprint.add_pad(i)
                            except:
                                print e
                                raise
            return exp
コード例 #6
0
ファイル: tree.py プロジェクト: zy1417548204/PAPER-In-CODE
 def construct_from_sexp(self, content):
     '''
     build the tree from s-expression
     :param content:
     :return:
     '''
     parsed = sexp.parse(content)
     self.construct_from_sexp(parsed)
コード例 #7
0
def main():
    args = get_args()

    bom = BOM(args.xmlpath, include=args.include, exclude=args.exclude)

    with open(args.xmlpath[:-3] + "kicad_pcb") as f:
        pcb = PCB(sexp.parse(f.read()))

    mm_to_pt = 2.835
    ps = cairo.PDFSurface(args.pdfpath,
                          args.page_width*mm_to_pt,
                          args.page_height*mm_to_pt)
    cr = cairo.Context(ps)

    # Scale user units to millimetres
    cr.scale(mm_to_pt, mm_to_pt)

    labels = sheet_positions(cr,
                             args.label_width, args.label_height,
                             args.labels_x, args.labels_y,
                             args.margin_top, args.margin_left,
                             args.spacing_x, args.spacing_y)

    suppliers = [name.strip() for name in args.suppliers.split(",")]

    for line in bom.lines:
        if line.supplier not in suppliers:
            continue
        if not line.footprint and not args.include_parts_without_footprint:
            continue
        label = next(labels)
        line.render(cr,
                    (label[0]+1, label[1]),
                    args.label_width-2, 14)
        sides = pcb.get_mod_sides(line.refs)

        if "F.Cu" in sides and "B.Cu" in sides:
            # if both sides present, split area and draw both
            pcb.render(cr, (label[0]+1, label[1]+14),
                       (args.label_width-4)/2.0, args.label_height-14,
                       ["F.Fab"], ["F.Cu", "*.Cu", "F.SilkS"], sides["F.Cu"])

            pcb.render(cr, (label[0]+3+(args.label_width-3)/2.0, label[1]+14),
                       (args.label_width-4)/2.0, args.label_height-14,
                       ["B.Fab"], ["B.Cu", "*.Cu", "B.SilkS"], sides["B.Cu"],
                       args.flip_vert)

        elif "F.Cu" in sides:
            pcb.render(cr, (label[0]+1, label[1]+14),
                       args.label_width-2, args.label_height-14,
                       ["F.Fab"], ["F.Cu", "*.Cu", "F.SilkS"], sides["F.Cu"])
        elif "B.Cu" in sides:
            pcb.render(cr, (label[0]+1, label[1]+14),
                       args.label_width-2, args.label_height-14,
                       ["B.Fab"], ["B.Cu", "*.Cu", "B.SilkS"], sides["B.Cu"],
                       args.flip_vert)

    cr.show_page()
コード例 #8
0
ファイル: stickerbom.py プロジェクト: cillian64/agg-kicad
def main():
    args = get_args()

    bom = BOM(args.xmlpath, include=args.include, exclude=args.exclude)

    with open(args.xmlpath[:-3] + "kicad_pcb") as f:
        pcb = PCB(sexp.parse(f.read()))

    mm_to_pt = 2.835
    ps = cairo.PDFSurface(args.pdfpath,
                          args.page_width*mm_to_pt,
                          args.page_height*mm_to_pt)
    cr = cairo.Context(ps)

    # Scale user units to millimetres
    cr.scale(mm_to_pt, mm_to_pt)

    labels = sheet_positions(cr,
                             args.label_width, args.label_height,
                             args.labels_x, args.labels_y,
                             args.margin_top, args.margin_left,
                             args.spacing_x, args.spacing_y)

    suppliers = [name.strip() for name in args.suppliers.split(",")]

    for line in bom.lines:
        if line.supplier not in suppliers:
            continue
        if not line.footprint and not args.include_parts_without_footprint:
            continue
        label = next(labels)
        line.render(cr,
                    (label[0]+1, label[1]),
                    args.label_width-2, 14)
        sides = pcb.get_mod_sides(line.refs)

        if "F.Cu" in sides and "B.Cu" in sides:
            # if both sides present, split area and draw both
            pcb.render(cr, (label[0]+1, label[1]+14),
                       (args.label_width-4)/2.0, args.label_height-14,
                       ["F.Fab"], ["F.Cu", "*.Cu", "F.SilkS"], sides["F.Cu"])

            pcb.render(cr, (label[0]+3+(args.label_width-3)/2.0, label[1]+14),
                       (args.label_width-4)/2.0, args.label_height-14,
                       ["B.Fab"], ["B.Cu", "*.Cu", "B.SilkS"], sides["B.Cu"],
                       args.flip_vert)

        elif "F.Cu" in sides:
            pcb.render(cr, (label[0]+1, label[1]+14),
                       args.label_width-2, args.label_height-14,
                       ["F.Fab"], ["F.Cu", "*.Cu", "F.SilkS"], sides["F.Cu"])
        elif "B.Cu" in sides:
            pcb.render(cr, (label[0]+1, label[1]+14),
                       args.label_width-2, args.label_height-14,
                       ["B.Fab"], ["B.Cu", "*.Cu", "B.SilkS"], sides["B.Cu"],
                       args.flip_vert)

    cr.show_page()
コード例 #9
0
 def test_tail_call_in_one_branch_linear_call_in_other(self) -> None:
     prog = sexp.parse('''
         (define (vacuous-tail)
             (if true (+ 1 (vacuous-tail)) (vacuous-tail))
         )''')
     self.finder.visit(prog)
     self.assertEqual(1, len(self.finder.tail_calls))
     self.assert_symbol_in_tail_calls(sexp.SSym('vacuous-tail'),
                                      self.finder.tail_calls)
コード例 #10
0
 def test_function_def(self) -> None:
     prog = '(define (funcy spam egg) (+ spam egg)) (funcy 42 43)'
     self.assertEqual([
         SFunction(
             SSym('funcy'), [SSym('spam'), SSym('egg')],
             sexp.to_slist([SCall(SSym('+'),
                                  [SSym('spam'), SSym('egg')])])),
         SCall(SSym('funcy'), [SNum(42), SNum(43)])
     ], sexp.parse(prog))
コード例 #11
0
ファイル: compiler.py プロジェクト: janssen/pylisp
 def compile(self, s):
     try:
         code = parser.parse(s) if isinstance(s, str) else s
         ast = map(self._compile, self.intp.preprocess(code))
         pkg = self._package(ast)
         if debug > -1: print_code(ast)
         return Environment(pkg, self.context)
     except Exception as e:
         import traceback
         traceback.print_exc()
コード例 #12
0
ファイル: defuna.py プロジェクト: thesolyd/elispsanskrit
def prepare_v1(glob):
    # remove comments
    glob = re.sub(r';.*?[\r\n]', '', glob)
    x = sexp.parse(glob)
    if True:
        print "raw parse:"
        print x
    outarr = []
    prettyprint(x, outarr)
    for out in outarr:
        print out
コード例 #13
0
ファイル: defuna.py プロジェクト: funderburkjim/elispsanskrit
def prepare_v1(glob):
 # remove comments
 glob = re.sub(r';.*?[\r\n]','',glob)
 x = sexp.parse(glob)
 if True:
  print "raw parse:"
  print x
 outarr=[]
 prettyprint(x,outarr)
 for out in outarr:
  print out
コード例 #14
0
 def test_lambda(self) -> None:
     prog = '(lambda (spam egg) (+ spam egg)) (lambda () 42)'
     self.assertEqual([
         SFunction(
             SSym('__lambda0'), [SSym('spam'), SSym('egg')],
             sexp.to_slist([SCall(SSym('+'),
                                  [SSym('spam'), SSym('egg')])]),
             is_lambda=True),
         SFunction(SSym('__lambda1'), [],
                   sexp.to_slist([SNum(42)]),
                   is_lambda=True),
     ], sexp.parse(prog))
コード例 #15
0
 def test_lambda_called_inline(self) -> None:
     self.maxDiff = None
     prog = '((lambda (spam egg) (+ spam egg)) 42 43)'
     self.assertEqual([
         SCall(
             SFunction(SSym('__lambda0'),
                       [SSym('spam'), SSym('egg')],
                       sexp.to_slist(
                           [SCall(SSym('+'),
                                  [SSym('spam'), SSym('egg')])]),
                       is_lambda=True), [SNum(42), SNum(43)])
     ], sexp.parse(prog))
コード例 #16
0
ファイル: lisp.py プロジェクト: janssen/pylisp
    def run(self, s, mult=True):
        global debug
        if debug == -1:
            Lisp.preprocess_ = self.preprocess_._orig
            Lisp.eval = self.eval._orig
            Lisp.quasieval = self.quasieval._orig
            debug = -2
        
        try:
            if isinstance(s, str): s = parser.parse(s)
        except SyntaxError as e:
            self.vars["signal"](self, ["error", "standard", "syntax"], *e.args)

        if not mult: s = [s]
        return map(lambda x: self.eval(self.preprocess(x)), s)[-1] if s else None
コード例 #17
0
ファイル: defuna.py プロジェクト: funderburkjim/elispsanskrit
def prepare_test(glob):
 # change semicolon comments to (comment "comment")
 glob = re.sub(r'(;.*?)([\r\n])',r'(comment "\1")\2',glob)
 x = sexp.parse(glob)
 if True:
  print "raw parse:"
  print x
 from pprint import pprint
 with codecs.open("temp2","w","utf-8") as f:
  pprint(x,f)
 outarr=[]
 alterparse(x,outarr)
 with codecs.open("temp2","a","utf-8") as f:
  f.write("\nALTERPARSE\n\n")
  pprint(outarr,f)
 return outarr
コード例 #18
0
ファイル: defuna.py プロジェクト: funderburkjim/elispsanskrit
def prepare(glob,testflag=False):
 # try to convert array literals to lists
 glob = re.sub(r'\[','(array ',glob)
 glob = re.sub(r'\]',')',glob)
 # change semicolon comments to (comment "comment")
 glob = prepare_comment(glob)
 # change \" to some unique string (say DOUBLEQUOTE)
 
 unique = (r'\\"','DOUBLEQUOTE')
 glob = re.sub(unique[0],unique[1],glob)
 # use sexp to parse
 x = sexp.parse(glob)
 # 'improve' what sexp did
 outarr=[]
 alterparse(x,outarr,unique)
 return outarr
コード例 #19
0
ファイル: test_visitor.py プロジェクト: porglezomp/scheme-jit
    def test_visit_begin(self) -> None:
        prog = sexp.parse('(begin egg 42)')
        recorder = TraversalRecorder()
        recorder.visit(prog)

        expected = [
            'SBegin',
            'SSym',
            'SNum',
        ]

        self.assertEqual(expected, recorder.exprs)

        counter = ExpressionCounter()
        counter.visit(prog)
        self.assertEqual(len(expected), counter.num_exprs)
コード例 #20
0
ファイル: defuna.py プロジェクト: thesolyd/elispsanskrit
def prepare_test(glob):
    # change semicolon comments to (comment "comment")
    glob = re.sub(r'(;.*?)([\r\n])', r'(comment "\1")\2', glob)
    x = sexp.parse(glob)
    if True:
        print "raw parse:"
        print x
    from pprint import pprint
    with codecs.open("temp2", "w", "utf-8") as f:
        pprint(x, f)
    outarr = []
    alterparse(x, outarr)
    with codecs.open("temp2", "a", "utf-8") as f:
        f.write("\nALTERPARSE\n\n")
        pprint(outarr, f)
    return outarr
コード例 #21
0
ファイル: defuna.py プロジェクト: thesolyd/elispsanskrit
def prepare(glob, testflag=False):
    # try to convert array literals to lists
    glob = re.sub(r'\[', '(array ', glob)
    glob = re.sub(r'\]', ')', glob)
    # change semicolon comments to (comment "comment")
    glob = prepare_comment(glob)
    # change \" to some unique string (say DOUBLEQUOTE)

    unique = (r'\\"', 'DOUBLEQUOTE')
    glob = re.sub(unique[0], unique[1], glob)
    # use sexp to parse
    x = sexp.parse(glob)
    # 'improve' what sexp did
    outarr = []
    alterparse(x, outarr, unique)
    return outarr
コード例 #22
0
ファイル: test_visitor.py プロジェクト: porglezomp/scheme-jit
    def test_visit_vect(self) -> None:
        prog = sexp.parse('[1 spam true]')
        recorder = TraversalRecorder()
        recorder.visit(prog)

        expected = [
            'SVect',
            'SNum',
            'SSym',
            'SBool',
        ]

        self.assertEqual(expected, recorder.exprs)

        counter = ExpressionCounter()
        counter.visit(prog)
        self.assertEqual(len(expected), counter.num_exprs)
コード例 #23
0
ファイル: test_visitor.py プロジェクト: porglezomp/scheme-jit
    def test_visit_conditional(self) -> None:
        prog = sexp.parse('(if true 42 nope)')
        recorder = TraversalRecorder()
        recorder.visit(prog)

        expected = [
            'SConditional',
            'SBool',
            'SNum',
            'SSym',
        ]

        self.assertEqual(expected, recorder.exprs)

        counter = ExpressionCounter()
        counter.visit(prog)
        self.assertEqual(len(expected), counter.num_exprs)
コード例 #24
0
    def test_quote(self) -> None:
        self.assertEqual([Quote(SSym('spam'))], sexp.parse("'spam"))

        self.assertEqual([Quote(Nil)], sexp.parse("'()"))
        self.assertEqual([Quote(Nil)], sexp.parse("(quote ())"))

        self.assertEqual([
            Quote(sexp.to_slist(
                [SSym('if'), SBool(True),
                 SNum(2), SNum(3)]))
        ], sexp.parse("'(if true 2 3)"))

        self.assertEqual(
            [Quote(sexp.to_slist([SNum(1), SNum(2), SNum(3)]))],
            sexp.parse("(quote (1 2 3))"))

        self.assertEqual(sexp.parse("'(1 2 3)"), sexp.parse("(quote (1 2 3))"))

        self.assertEqual(str(sexp.parse("(quote (1 2 3))")[0]), "'(1 2 3)")
コード例 #25
0
ファイル: test_visitor.py プロジェクト: porglezomp/scheme-jit
    def test_visit_lambda(self) -> None:
        prog = sexp.parse('(lambda (egg sausage) false egg)')
        recorder = TraversalRecorder()
        recorder.visit(prog)

        expected = [
            'SFunction',
            'SSym',
            'SSym',
            'SBool',
            'SSym',
        ]

        self.assertEqual(expected, recorder.exprs)

        counter = ExpressionCounter()
        counter.visit(prog)
        self.assertEqual(len(expected), counter.num_exprs)
コード例 #26
0
ファイル: test_visitor.py プロジェクト: porglezomp/scheme-jit
    def test_visit_inline_called_lambda(self) -> None:
        prog = sexp.parse('((lambda (egg) egg) 42)')
        recorder = TraversalRecorder()
        recorder.visit(prog)

        expected = [
            'SCall',
            'SFunction',
            'SSym',
            'SSym',
            'SNum',
        ]

        self.assertEqual(expected, recorder.exprs)

        counter = ExpressionCounter()
        counter.visit(prog)
        self.assertEqual(len(expected), counter.num_exprs)
コード例 #27
0
ファイル: runner.py プロジェクト: porglezomp/scheme-jit
def run(env: EvalEnv, text: str, context: str = "top-level") -> Value:
    """
    Run a piece of code in an environment, returning its result.

    >>> env = EvalEnv()
    >>> add_intrinsics(env)
    >>> add_builtins(env)
    >>> add_prelude(env)
    >>> run(env, '(+ 1 1)')
    SNum(value=2)
    >>> run(env, '(> (vector-length (cons 1 [])) 3)')
    SBool(value=False)
    """
    code = sexp.parse(text)
    result: Value = sexp.SVect([])
    for part in code:
        result = run_code(env, part, context=context)
    return result
コード例 #28
0
ファイル: test_visitor.py プロジェクト: porglezomp/scheme-jit
    def test_visit_quote(self) -> None:
        prog = sexp.parse('(quote (1 spam true))')
        recorder = TraversalRecorder()
        recorder.visit(prog)

        expected = [
            'Quote',
            'SPair',
            'SNum',
            'SPair',
            'SSym',
            'SPair',
            'SBool',
        ]

        self.assertEqual(expected, recorder.exprs)

        counter = ExpressionCounter()
        counter.visit(prog)
        self.assertEqual(len(expected), counter.num_exprs)
コード例 #29
0
    def test_fib_tail(self) -> None:
        prog = sexp.parse('''
            (define (fib-tail n)
                (fib-tail-impl n 0 1)
            )

            (define (fib-tail-impl n first second)
                (if (= n 0)
                    first
                    (if (= n 1)
                        second
                        (fib-tail-impl (- n 1) second (+ first second))
                    )
                )
            )''')

        self.finder.visit(prog)
        self.assertEqual(1, len(self.finder.tail_calls))
        self.assert_symbol_in_tail_calls(sexp.SSym('fib-tail-impl'),
                                         self.finder.tail_calls)
コード例 #30
0
 def test_comments(self) -> None:
     prog = """
     ;;; We want to define a cool function here!
     (define ; hi
       ;; A function name
       (cool-func x y) ; wow
       ;; branches are cheaper than subtraction, right? :P
       (if (= x y)
         0
         (- x y)))
     """
     self.assertEqual([
         SFunction(
             SSym('cool-func'), [SSym('x'), SSym('y')],
             sexp.to_slist([
                 SConditional(
                     SCall(SSym('='), [SSym('x'), SSym('y')]), SNum(0),
                     SCall(SSym('-'), [SSym('x'), SSym('y')]))
             ]))
     ], sexp.parse(prog))
コード例 #31
0
    def test_no_tail_calls_in_lambdas_dlist_code(self) -> None:
        prog = sexp.parse('''
        (define (dlist-push-front dlist datum)
            (if (dlist-empty dlist)
                ((lambda (dlist new-node)
                    (dlist-set-first! dlist new-node)
                    (dlist-set-last! dlist new-node)
                ) dlist (node-make datum 0 0))

                ((lambda (dlist current-first new-node)
                    (node-set-prev! current-first new-node)
                    (dlist-set-first! dlist new-node)
                ) dlist (dlist-first dlist) (node-make datum 0
                                            (dlist-first dlist)))
            )
        )
        ''')

        self.finder.visit(prog)
        self.assertEqual(0, len(self.finder.tail_calls))
コード例 #32
0
def main():
    args = get_args()

    bom = BOM(args.xmlpath)

    with open(args.xmlpath[:-3] + "kicad_pcb") as f:
        pcb = PCB(sexp.parse(f.read()))

    mm_to_pt = 2.835
    ps = cairo.PDFSurface(args.pdfpath,
                          args.page_width*mm_to_pt,
                          args.page_height*mm_to_pt)
    cr = cairo.Context(ps)

    # Scale user units to millimetres
    cr.scale(mm_to_pt, mm_to_pt)

    labels = sheet_positions(cr,
                             args.label_width, args.label_height,
                             args.labels_x, args.labels_y,
                             args.margin_top, args.margin_left,
                             args.spacing_x, args.spacing_y)

    suppliers = [name.strip() for name in args.suppliers.split(",")]

    for line in bom.lines:
        if line.supplier not in suppliers:
            continue
        if not line.footprint and not args.include_parts_without_footprint:
            continue
        label = next(labels)
        line.render(cr,
                    (label[0]+1, label[1]),
                    args.label_width-2, 14)
        pcb.render(cr,
                   (label[0]+1, label[1]+14),
                   args.label_width-2, args.label_height-14,
                   line.refs)
    cr.show_page()
コード例 #33
0
ファイル: stickerbom.py プロジェクト: mattcoates/agg-kicad
def main(xmlpath, pdfpath):
    bom = BOM(xmlpath)

    with open(xmlpath[:-3] + "kicad_pcb") as f:
        pcb = PCB(sexp.parse(f.read()))

    mm_to_pt = 2.835
    ps = cairo.PDFSurface(pdfpath, page_width * mm_to_pt, page_height * mm_to_pt)
    cr = cairo.Context(ps)

    # Scale user units to millimetres
    cr.scale(1 / 0.3528, 1 / 0.3528)

    labels = sheet_positions(
        cr, label_width, label_height, labels_x, labels_y, margin_top, margin_left, spacing_x, spacing_y
    )

    for line, label in zip(bom.lines, labels):
        if line.supplier in suppliers_to_output:
            line.render(cr, (label[0] + 1, label[1]), label_width - 2, 14)
            pcb.render(cr, (label[0] + 1, label[1] + 14), label_width - 2, label_height - 14, line.refs)
    cr.show_page()
コード例 #34
0
ファイル: compiler.py プロジェクト: tonetheman/pylisp
    def _compile(self, s):
        if isinstance(s, str): s = parser.parse(s)
        s = self.intp.preprocess(s)
        a = map(self._tostmt, s)
        
        if self.interactive:
            a = ast.Interactive(a)
            t = "single"
        elif len(a) == 1 and isinstance(a[0], ast.Expr):
            a = ast.Expression(a[0].value)
            t = "eval"
        else:
            a = ast.Module(a)
            t = "exec"
        ast.fix_missing_locations(a)

        try:
            return compile(a, "<pylisp>", t)
        except ValueError:
            if debug > -1:
                print "Error Compiling Code!"
                print ast.dump(a)
            raise Exception
コード例 #35
0
def main(xmlpath, pdfpath):
    bom = BOM(xmlpath)

    with open(xmlpath[:-3] + "kicad_pcb") as f:
        pcb = PCB(sexp.parse(f.read()))

    mm_to_pt = 2.835
    ps = cairo.PDFSurface(pdfpath, page_width*mm_to_pt, page_height*mm_to_pt)
    cr = cairo.Context(ps)

    # Scale user units to millimetres
    cr.scale(1/0.3528, 1/0.3528)

    labels = sheet_positions(cr, label_width, label_height,
                             labels_x, labels_y, margin_top, margin_left,
                             spacing_x, spacing_y)

    for line, label in zip(bom.lines, labels):
        if line.supplier in suppliers_to_output:
            line.render(cr, (label[0]+1, label[1]), label_width-2, 14)
            pcb.render(cr, (label[0]+1, label[1]+14), label_width-2,
                       label_height-14, line.refs)
    cr.show_page()
コード例 #36
0
ファイル: test_visitor.py プロジェクト: porglezomp/scheme-jit
    def test_visit_call(self) -> None:
        prog = sexp.parse('(define (spam egg sausage) egg) (spam 42 true)')
        recorder = TraversalRecorder()
        recorder.visit(prog)

        expected = [
            'SFunction',
            'SSym',
            'SSym',
            'SSym',
            'SSym',

            'SCall',
            'SSym',
            'SNum',
            'SBool',
        ]

        self.assertEqual(expected, recorder.exprs)

        counter = ExpressionCounter()
        counter.visit(prog)
        self.assertEqual(len(expected), counter.num_exprs)
コード例 #37
0
ファイル: builtin.py プロジェクト: tonetheman/pylisp
def read(s=""):
    import sexp
    v = raw_input(s)
    return list(sexp.parse(v))
コード例 #38
0
ファイル: templates.py プロジェクト: AdiKo/avmplus
#
# main
#

# dump processed defs
def dump(defs):
  for d in defs:
    print '\n' + d.dump()

# generator functions callable from the command line
gens = {
  'defs': gendefs,        # generate code
  'dump': dump            # dump internal reps
}

if len(sys.argv) > 1 and sys.argv[1] in gens:
  gen = gens[sys.argv[1]]
else:
  print "Error: must specify defs or dump as command-line argument"
  sys.exit(1)

try:
  sexprs = [sexpr for sexpr in parse(hrdefs) if isValid(sexpr)]
  defs = [toDef(sexpr) for sexpr in sexprs]
  process(defs)
  gen(defs)
except ParseError as e:
  print 'parse error: %s' % e.message()
  sys.exit(1)

コード例 #39
0
ファイル: libboard.py プロジェクト: hacxman/clustergen
    def to_sexp(self):
        o = []
        o.append( [('net',), (0,), ('""',)])
        for n in self.nets:
            o.append( [('net',), (n,), (self.nets[n],)])

        oo = []
        oo.append( [('clearance',), ('0.1',)] )
        oo.append( [('trace_width',), ('0.25',)] )
        oo.append( [('via_dia',), ('0.6',)] )
        oo.append( [('via_drill',), ('0.4',)] )
        oo.append( [('uvia_dia',), ('0.3',)] )
        oo.append( [('uvia_drill',), ('0.1',)] )
        for n in sorted(map(int,self.nets)):
            oo.append( [('add_net',), (self.nets[n],)])
        o.append( [('net_class',), ('Default',) ,('\"this is default net class\"',)] + oo )
        
        for p in self.packages:
            o.append( self.packages[p].to_sexp() )

        o = [('kicad_pcb',), [('version',), ('4',)], [('host',), ('libboard',), ('0.0.1',)]] +\
        [[('general',),
            [('links',), ('7',)],
            [('area',), ('7',)],
            [('thickness',), ('1.6',)],
            [('drawings',), ('4',)],
            [('tracks',), ('0',)],
            [('zones',), ('0',)],
            [('modules',), ('{}'.format(len(self.nets.values())),)],
            [('nets',), ('7',)],
            [('no_connects',), ('6',)]]] + sexp.parse("""(layers
    (0 F.Cu signal)""" + \
    '\n'.join(['({} In{}.Cu signal)'.format(i, i) for i in range(self.layer_count-2)]) + \
#    (1 In1.Cu signal)
#    (2 In2.Cu signal)
#    (3 In3.Cu signal)
#    (4 In4.Cu signal)
#    (5 In5.Cu signal)
#    (6 In6.Cu signal)
#    (7 In7.Cu signal)
#    (8 In8.Cu signal)
#    (9 In9.Cu signal)
#    (10 In10.Cu signal)
#    (11 In11.Cu signal)
#    (12 In12.Cu signal)
#    (13 In13.Cu signal)
#    (14 In14.Cu signal)
#    (15 In15.Cu signal)
#    (16 In16.Cu signal)
#    (17 In17.Cu signal)
#    (18 In18.Cu signal)
#    (19 In19.Cu signal)
#    (20 In20.Cu signal)
#    (21 In21.Cu signal)
#    (22 In22.Cu signal)
#    (23 In23.Cu signal)
#    (24 In24.Cu signal)
#    (25 In25.Cu signal)
#    (26 In26.Cu signal)
#    (27 In27.Cu signal)
#    (28 In28.Cu signal)
#    (29 In29.Cu signal)
#    (30 In30.Cu signal)
"""    (31 B.Cu signal)
    (32 B.Adhes user)
    (33 F.Adhes user)
    (34 B.Paste user)
    (35 F.Paste user)
    (36 B.SilkS user)
    (37 F.SilkS user)
    (38 B.Mask user)
    (39 F.Mask user)
    (40 Dwgs.User user)
    (41 Cmts.User user)
    (42 Eco1.User user)
    (43 Eco2.User user)
    (44 Edge.Cuts user)
    (45 Margin user)
    (46 B.CrtYd user)
    (47 F.CrtYd user)
    (48 B.Fab user)
    (49 F.Fab user)
)""") +  sexp.parse("""(page A4)
(setup
    (last_trace_width 0.25)
    (trace_clearance 0.2)
    (zone_clearance 0.508)
    (zone_45_only no)
    (trace_min 0.2)
    (segment_width 0.2)
    (edge_width 0.1)
    (via_size 0.6)
    (via_drill 0.4)
    (via_min_size 0.4)
    (via_min_drill 0.3)
    (uvia_size 0.3)
    (uvia_drill 0.1)
    (uvias_allowed no)
    (uvia_min_size 0.2)
    (uvia_min_drill 0.1)
    (pcb_text_width 0.3)
    (pcb_text_size 1.5 1.5)
    (mod_edge_width 0.15)
    (mod_text_size 1 1)
    (mod_text_width 0.15)
    (pad_size 1.5 1.5)
    (pad_drill 0.6)
    (pad_to_mask_clearance 0)
    (aux_axis_origin 0 0)
    (visible_elements FFFFFF7F)
    (pcbplotparams
      (layerselection 0x00030_80000001)
      (usegerberextensions false)
      (excludeedgelayer true)
      (linewidth 0.100000)
      (plotframeref false)
      (viasonmask false)
      (mode 1)
      (useauxorigin false)
      (hpglpennumber 1)
      (hpglpenspeed 20)
      (hpglpendiameter 15)
      (hpglpenoverlay 2)
      (psnegative false)
      (psa4output false)
      (plotreference true)
      (plotvalue true)
      (plotinvisibletext false)
      (padsonsilk false)
      (subtractmaskfromsilk false)
      (outputformat 1)
      (mirror false)
      (drillshape 1)
      (scaleselection 1)
      (outputdirectory "."))
  )""") + o

        return o
コード例 #40
0
ファイル: tree.py プロジェクト: zy1417548204/PAPER-In-CODE
 def construct_from_sexp(self, content):
     '''build the tree from s-expression'''
     parsed = sexp.parse(content)
     self.construct_from_list(parsed)
コード例 #41
0
def test_sexp_exception():
    for sexp_input, parsed in testcases:
        assert sexp.parse(sexp_input) == parsed

    with pytest.raises(ValueError):
        sexp.parse('(1 (2 3)')
コード例 #42
0
def validate(exp):
    """ validate if a s-expression is a valid query"""
    s = sexp.parse(exp)
    j = {"query": s}
    jsonschema.validate(j, schema)
    return j
コード例 #43
0
ファイル: importer.py プロジェクト: janssen/pylisp
 def eval(self, path):
     if preprocess_only:
         import sexp
         map(self.l.preprocess, sexp.parse(open(path).read()))
     else:
         self.l.run(open(path).read())