Пример #1
0
def main(argv=sys.argv):
    # LOL FIXING SUM BUGS YO.
    sys.setrecursionlimit(10000)

    (opts, args) = parse_options(argv)

    logging.setLogLevel(level=opts.loglevel)

    joosc_opts = JooscOptions(opts.stage, opts.include_stdlib == True,
        opts.print_stdlib == True, opts.directory_crawl == True,
        opts.clean_output == True)
    
    if opts.test:
        logging.info("TESTING %s" % (opts.test))

        # TODO: Decide when to toggle verbose. Old method was insufficient.
        test.setup_and_run(opts.test, opts.show_errors == True, False,
            joosc_opts)
        return 0
 
    if len(args) < 1:
        logging.info("Nothing to compile.")
        return 0

    joosc(args, joosc_opts)
Пример #2
0
        
        # Shift
        stack.append(a)
        node_stack.append(node.Node(a[0], a, []))
        
        #logging.info("#PARSE SHIFT  : %s" % (stack))
        #logging.info("#NODE STACK   : %s" % (node_stack))
    
    # Accept
    return node.Node("ROOT", children=node_stack)

if __name__ == "__main__":
    import scanner
    import pprint
    
    logging.setLogLevel("INFO")

    t = [("BOF", "BOF"), ("id", "fat"), ("EOF", "EOF")]
    z = read_parse_table("assignment_testcases/others/sample.lr1")
    
    parse_tree = parse(t, z)
    print(parse_tree)
    print("BFS List of all nodes:")
    pprint.pprint(list(parse_tree.bfs_iter()))
    print("List of all leafs:")
    pprint.pprint(parse_tree.leafs())
    
    z = read_parse_table("grammar.lr1")
    with open("assignment_testcases/others/sample.java", 'r') as f:
       t = scanner.scan(f.read())
    parse_tree = parse(t, z)
Пример #3
0
                if token_label in ['StringLiteral', 'CharacterLiteral']:
                    token_value = unescape_str(token_value[1:-1])
                tokens.append(Token(token_label, token_value, pos, line))
        else:
            logging.error("LEXER FAILURE: pos = %d, line = %d; next few chars:\n%s"
                % (pos, line, program[pos:pos+20].replace("\n", "\\n")))

            sys.exit(42)

    tokens.append(Token('EOF', '', pos, line)) # End of file augmentation token.
    return tokens

if __name__ == "__main__":
    import test
    def test_work(path):
        try:
            with open(path, 'r') as f:
                scan(f.read())
            return 0
        except SystemExit as e:
            return 1

    logging.setLogLevel("NONE")
    ts = test.TestRunner("Scanner", test_work)
    ts.assignment = "a1"
    ts.re_expected = "LEXER_EXCEPTION"
    #ts.verbose = True

    ts.run()