annotate python/c3/builder.py @ 166:da0087b82fbe

Improved type checking
author Windel Bouwman
date Fri, 22 Mar 2013 16:15:31 +0100
parents 598d3888a11c
children 0b5b2ee6b435
rev   line source
165
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
1 import ppci
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
2 from . import Parser, Semantics, TypeChecker, Analyzer, CodeGenerator, AstPrinter
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
3
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
4 class Builder:
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
5 def __init__(self, diag):
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
6 self.diag = diag
166
da0087b82fbe Improved type checking
Windel Bouwman
parents: 165
diff changeset
7 self.p = Parser(diag)
165
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
8 self.tc = TypeChecker(diag)
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
9 self.al = Analyzer(diag)
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
10 self.cg = CodeGenerator()
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
11 self.ap = AstPrinter()
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
12 def build(self, src):
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
13 # Store src for later:
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
14 self.src = src
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
15 print('[0] source:')
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
16 print(src)
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
17 print('[1] parsing')
166
da0087b82fbe Improved type checking
Windel Bouwman
parents: 165
diff changeset
18 self.pkg = self.p.parseSource(src)
da0087b82fbe Improved type checking
Windel Bouwman
parents: 165
diff changeset
19 self.al.analyzePackage(self.pkg)
da0087b82fbe Improved type checking
Windel Bouwman
parents: 165
diff changeset
20 self.tc.checkPackage(self.pkg)
165
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
21 print('{0} errors'.format(len(self.diag.diags)))
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
22 for d in self.diag.diags:
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
23 print('ERROR:')
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
24 ppci.printError(src, d)
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
25 print('[2] ast:')
166
da0087b82fbe Improved type checking
Windel Bouwman
parents: 165
diff changeset
26 self.ap.printAst(self.pkg)
165
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
27
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
28 ok = len(self.diag.diags) == 0
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
29 if ok:
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
30 print('Generating ir-code')
166
da0087b82fbe Improved type checking
Windel Bouwman
parents: 165
diff changeset
31 i = self.cg.gencode(self.pkg)
165
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
32 return i
598d3888a11c Added front class and fided AST view
Windel Bouwman
parents:
diff changeset
33