Ejemplo n.º 1
0
def main(argv):
    input_stream = FileStream(argv[1])
    lexer = LittleLexer(input_stream)
    lexer.removeErrorListener(ConsoleErrorListener.INSTANCE)
    stream = CommonTokenStream(lexer)
    parser = LittleParser(stream)
    parser.removeErrorListener(ConsoleErrorListener.INSTANCE)
    tree = parser.program()
    visitor = Visitor()
    visitor.visit(tree)
Ejemplo n.º 2
0
def visit(file, datapack_name, imported=[]):
    with open(file, "r") as f:
        code = f.readlines()

    tree = get_tree(file)
    i_visitor = IncludeVisitor()
    i_visitor.visit(tree)
    modules = i_visitor.modules
    mem = None
    for module in modules:
        mod_file = os.path.join(parent(file), module[0] + ".ms")
        if os.path.isfile(mod_file):
            if not module[0] in imported:
                imported.append(module[0])
                mem = visit(mod_file, datapack_name, imported)
        else:
            line = module[1]
            text = code[line - 1].strip()
            print(
                f"{Fore.RED}Traceback: Line {line}\n{text}\nModuleNotFoundError: No module named {module[0]}{Style.RESET_ALL}"
            )
            raise Exception("Abort")

    m_visitor = MVisitor(name, code, file)
    if mem is not None:
        m_visitor.igmemory = mem[0]
        m_visitor.igfunctionargs = mem[1]
        m_visitor.igfunctionreturn = mem[2]
        m_visitor.igfunctions = mem[3]
        m_visitor.igloops = mem[4]
        m_visitor.loops = mem[5]
        m_visitor.tag = mem[6]
    m_visitor.visit(tree)

    visitor = Visitor(name, code, file)
    visitor.igmemory = m_visitor.igmemory
    visitor.igfunctionargs = m_visitor.igfunctionargs
    visitor.igfunctionreturn = m_visitor.igfunctionreturn
    visitor.igfunctions = m_visitor.igfunctions
    visitor.igloops = m_visitor.igloops
    visitor.loops = m_visitor.loops
    visitor.tag = m_visitor.tag
    if mem is not None:
        visitor.warnings = mem[7]
    visitor.visit(tree)

    return (visitor.igmemory, visitor.igfunctionargs, visitor.igfunctionreturn,
            visitor.igfunctions, visitor.igloops, visitor.loops, visitor.tag,
            visitor.warnings)
Ejemplo n.º 3
0
def visit(name, file):
    tree = get_tree(file)
    mapvisitor = MappingVisitor(name, file)
    try:
        mapvisitor.visit(tree)
    except MappingException:
        return None
    visitor = Visitor(name, file)
    visitor.igfunctions = mapvisitor.igfunctions
    visitor.igmemory = mapvisitor.igmemory
    try:
        visitor.visit(tree)
    except CompileTimeException:
        return None
    print(visitor.tempvars)
    print(visitor.memory)
    return visitor
Ejemplo n.º 4
0
def main(argv):
    usingFile = False
    # if argv is not None:
    #     inputStream = FileStream(sys.argv[1])
    #     usingFile = True
    while True:
        stdout.write("mathjunkie>> ")
        stdout.flush()  # this flushes the output out immediately.
        if not usingFile:
            inputStream = InputStream(stdin.readline())
        lexer = MathCrazeLexer(inputStream)
        tokenStream = CommonTokenStream(lexer)
        parser = MathCrazeParser(tokenStream)
        tree = parser.equal()
        # lispTree = tree.toStringTree(recog=parser)
        # print(lispTree)
        visitor = Visitor()
        print(visitor.visit(tree))
Ejemplo n.º 5
0
def main(argv):
    usingFile = False
    # if argv is not None:
    #     inputStream = FileStream(sys.argv[1])
    #     usingFile = True
    while True:
        stdout.write("mathjunkie>> ")
        stdout.flush() # this flushes the output out immediately.
        if not usingFile:
            inputStream = InputStream(stdin.readline())
        lexer = MathCrazeLexer(inputStream)
        tokenStream = CommonTokenStream(lexer)
        parser = MathCrazeParser(tokenStream)
        tree = parser.equal()
        # lispTree = tree.toStringTree(recog=parser)
        # print(lispTree)
        visitor = Visitor()
        print(visitor.visit(tree))
Ejemplo n.º 6
0
import sys
from antlr4 import *
from antlr4.InputStream import InputStream
from lexer.SimpleLangLexer import SimpleLangLexer
from parser.SimpleLangParser import SimpleLangParser
from Visitor import Visitor

if __name__ == '__main__':
    if len(sys.argv) > 1:
        input_stream = FileStream('test.txt')
    else:
        input_stream = InputStream(sys.stdin.readline())

    lexer = SimpleLangLexer(input_stream)
    token_stream = CommonTokenStream(lexer)
    parser = SimpleLangParser(token_stream)
    tree = parser.block()
    visitor = Visitor()
    visitor.visit(tree)
    print(visitor.generateLLVM())