Mercurial > lcfOS
comparison ide/compiler/compiler.py @ 1:92df07bc2081
Initial import of compiler
author | windel |
---|---|
date | Sun, 18 Sep 2011 19:00:29 +0200 |
parents | |
children | 818f80afa78b |
comparison
equal
deleted
inserted
replaced
0:1a4faf9ef1ea | 1:92df07bc2081 |
---|---|
1 import hashlib | |
2 # Import compiler components: | |
3 from . import lexer | |
4 from . import parser | |
5 from .codegenerator import CodeGenerator | |
6 from .nodes import ExportedSymbol | |
7 | |
8 class Compiler: | |
9 versie = '0.9.3' | |
10 | |
11 def __repr__(self): | |
12 return 'LCFOS compiler {0}'.format(self.versie) | |
13 | |
14 def generateSignature(self, src): | |
15 return hashlib.md5(bytes(src,encoding='ascii')).hexdigest() | |
16 | |
17 def compilesource(self, src): | |
18 """ Front end that handles the stages: """ | |
19 tokens = lexer.tokenize(src) # Lexical stage | |
20 ast = parser.Parser(tokens).parseModule() # Parse a module | |
21 CodeGenerator().generatecode(ast) | |
22 # Attach a signature: | |
23 ast.signature = self.generateSignature(src) | |
24 # Generate exported symbols: | |
25 ast.exports = [] | |
26 for proc in ast.procs: | |
27 if proc.public: | |
28 sym = ExportedSymbol(proc.name, proc.typ) | |
29 sym.imageoffset = proc.entrypoint | |
30 ast.exports.append(sym) | |
31 | |
32 return ast | |
33 |