Mercurial > lcfOS
view python/testc3.py @ 151:afc8c0207984
Added ir code generator stub
author | Windel Bouwman |
---|---|
date | Fri, 01 Mar 2013 17:13:56 +0100 |
parents | 4ae0e02599de |
children | b73bc14a3aa3 |
line wrap: on
line source
import c3 from ppci.errors import printError, Diagnostics import time testsrc = """ package test; var u32 c, d; function void test1() { var u32 b; var int a = 10; b = 20; var int88 buf; var int i; i = 2; zero = i - 2; if (i > 1) { buf = b + 22 * i - 13 + (55 * 2 *9-2) / 44 - one } } function int t2(u32 a, u32 b) { return a + b; a = 2 } var u8 hahaa = 23 * 2; function int t2(u32 a, u32 b) { return a + b; a = 2 + 33 * 1 - 3; a = a - 2 } """ def printAst(ast, indent=''): print(indent + str(ast)) if isinstance(ast, c3.astnodes.Package): for s in ast.scope: printAst(s, indent + ' ') if isinstance(ast, c3.astnodes.Function): for s in ast.scope: printAst(s, indent + ' ') for c in ast.getChildren(): printAst(c, indent + ' ') def c3compile(src): print('[0] source:') print(src) print('[1] parsing') diag = Diagnostics() sema = c3.Semantics(diag) p = c3.Parser(sema, diag) tc = c3.TypeChecker(diag) al = c3.Analyzer(diag) cg = c3.CodeGenerator() t1 = time.time() p.parseSource(src) t2 = time.time() print('parsetime: {0} [s]'.format(t2 - t1)) t2 = time.time() tc.checkPackage(sema.mod) t3 = time.time() print('checktime: {0} [s]'.format(t3 - t2)) print('{0} errors'.format(len(diag.diags))) for d in diag.diags: print('ERROR:') printError(testsrc, d) print('[2] ast:') printAst(sema.mod) ok = len(diag.diags) == 0 if ok: cg.gencode(sema.mod) else: print('Not generating code') def do(): c3compile(testsrc) do()