view ide/compiler/compiler.py @ 5:818f80afa78b

Added handy highlighting to IDE
author windel-eee
date Thu, 22 Sep 2011 17:44:31 +0200
parents 92df07bc2081
children 1784af239df4
line wrap: on
line source

import hashlib
# Import compiler components:
from . import lexer
from .parser 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: """
      # Pass 1: parsing and type checking
      tokens = lexer.tokenize(src) # Lexical stage
      p = Parser(tokens)
      ast = p.parseModule() # Parse a module
      print(p.errorlist)
      if len(p.errorlist) > 0:
         self.errorlist = p.errorlist
         return
      # Pass 2: code generation
      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