def main(argv):
    input = FileStream(argv[1])
    print("\033[92mCompiling and executing {}\033[0m".format(argv[1]))

    lexer = C_GrammarLexer(input)
    stream = CommonTokenStream(lexer)
    parser = C_GrammarParser(stream)
    tree = parser.start()
    printer = GrammarListener()
    walker = ParseTreeWalker()
    walker.walk(printer, tree)

    symbol_table = SymbolTable()
    symbol_table.fill_tree(printer.AST_Root)

    CG = CodeGenerator(printer.AST_Root, symbol_table)
    CG.generate()
    symbol_table.to_dot()
    CG.writeToFile(argv[2])
Beispiel #2
0
    def process(self):
        ''' Process the assembly code '''

        lexicalAnalyzer = LexicalAnalyzer(self.args)
        syntaxAnalyzer = SyntaxAnalyzer(self.args)
        codeGenerator = CodeGenerator(self.args)

        # lexical analysis
        ok = lexicalAnalyzer.analyze()
        if not ok:
            return False

        # syntax analysis
        ok = syntaxAnalyzer.analyze(lexicalAnalyzer.tokens)
        if not ok:
            return False

        # code generation
        ok = codeGenerator.generate(syntaxAnalyzer.expressions)
        if not ok:
            return False

        return True
Beispiel #3
0
    def process(self):
        ''' Process the assembly code '''

        lexicalAnalyzer = LexicalAnalyzer(self.args)
        syntaxAnalyzer = SyntaxAnalyzer(self.args)
        codeGenerator = CodeGenerator(self.args)

        # lexical analysis
        ok = lexicalAnalyzer.analyze()
        if not ok:
            return False

        # syntax analysis
        ok = syntaxAnalyzer.analyze(lexicalAnalyzer.tokens)
        if not ok:
            return False

        # code generation
        ok = codeGenerator.generate(syntaxAnalyzer.expressions)
        if not ok:
            return False

        return True