Mercurial > lcfOS
view ide/compiler/compiler.py @ 1:92df07bc2081
Initial import of compiler
author | windel |
---|---|
date | Sun, 18 Sep 2011 19:00:29 +0200 |
parents | |
children | 818f80afa78b |
line wrap: on
line source
import hashlib # Import compiler components: from . import lexer from . import parser from .codegenerator import CodeGenerator from .nodes import ExportedSymbol class Compiler: versie = '0.9.3' def __repr__(self): return 'LCFOS compiler {0}'.format(self.versie) def generateSignature(self, src): return hashlib.md5(bytes(src,encoding='ascii')).hexdigest() def compilesource(self, src): """ Front end that handles the stages: """ tokens = lexer.tokenize(src) # Lexical stage ast = parser.Parser(tokens).parseModule() # Parse a module CodeGenerator().generatecode(ast) # Attach a signature: ast.signature = self.generateSignature(src) # Generate exported symbols: ast.exports = [] for proc in ast.procs: if proc.public: sym = ExportedSymbol(proc.name, proc.typ) sym.imageoffset = proc.entrypoint ast.exports.append(sym) return ast