Example #1
0
def run():
    g = Grammar.from_file('rhapsody.pg')

    this_folder = dirname(__file__)
    parser = GLRParser(g)

    # Small file
    parser.parse_file(join(this_folder, 'test_inputs', 'LightSwitch.rpy'))

    # Large file
    parser.parse_file(join(this_folder, 'test_inputs',
                           'LightSwitchDouble.rpy'))
Example #2
0
def trace(ctx, grammar_file, input_file, input):
    if not (input_file or input):
        prints('Expected either input_file or input string.')
        sys.exit(1)
    colors = ctx.obj['colors']
    grammar, table = check_get_grammar_table(grammar_file, True, colors)
    parser = GLRParser(grammar,
                       debug=True,
                       debug_trace=True,
                       debug_colors=colors)
    if input:
        parser.parse(input)
    else:
        parser.parse_file(input_file)
Example #3
0
def trace(ctx, grammar_file, input_file, input):
    if not (input_file or input):
        prints('Expected either input_file or input string.')
        sys.exit(1)
    colors = ctx.obj['colors']
    prefer_shifts = ctx.obj['prefer_shifts']
    prefer_shifts_over_empty = ctx.obj['prefer_shifts_over_empty']
    grammar, table = compile_get_grammar_table(grammar_file, True, colors,
                                               prefer_shifts,
                                               prefer_shifts_over_empty)
    parser = GLRParser(grammar, debug=True, debug_trace=True,
                       debug_colors=colors, prefer_shifts=prefer_shifts,
                       prefer_shifts_over_empty=prefer_shifts_over_empty)
    if input:
        parser.parse(input)
    else:
        parser.parse_file(input_file)
Example #4
0
def main(debug=False):
    this_folder = os.path.dirname(__file__)
    g = Grammar.from_file(os.path.join(this_folder, 'c.pg'),
                          re_flags=re.MULTILINE | re.VERBOSE)
    parser = GLRParser(g, debug=debug, debug_colors=True)

    # The input is C code after preprocessing
    forest = parser.parse_file(os.path.join(this_folder, 'example.c'))

    print('Solutions: ', len(forest))
    print('Ambiguities: ', forest.ambiguities)
Example #5
0
def parse(ctx, grammar_file, input_file, input, glr, recovery, dot, positions):
    if not (input_file or input):
        prints('Expected either input_file or input string.')
        sys.exit(1)
    colors = ctx.obj['colors']
    debug = ctx.obj['debug']
    prefer_shifts = ctx.obj['prefer_shifts']
    prefer_shifts_over_empty = ctx.obj['prefer_shifts_over_empty']
    grammar = Grammar.from_file(grammar_file, debug=debug, debug_colors=colors)
    if glr:
        parser = GLRParser(grammar,
                           debug=False,
                           debug_colors=colors,
                           error_recovery=recovery,
                           prefer_shifts=prefer_shifts,
                           prefer_shifts_over_empty=prefer_shifts_over_empty)
    else:
        parser = Parser(grammar,
                        build_tree=True,
                        debug=False,
                        debug_colors=colors,
                        error_recovery=recovery,
                        prefer_shifts=prefer_shifts,
                        prefer_shifts_over_empty=prefer_shifts_over_empty)

    if input:
        result = parser.parse(input)
    else:
        result = parser.parse_file(input_file)

    if glr:
        print(f'Solutions:{result.solutions}')
        print(f'Ambiguities:{result.ambiguities}')

    if recovery:
        print(f'Errors: {len(parser.errors)}')
        for error in parser.errors:
            print('\t', str(error))

    if glr and result.solutions > 1:
        print('Printing the forest:\n')
        result = result
    else:
        print('Printing the parse tree:\n')

    print(result.to_str())

    if dot:
        f_name = 'forest.dot' if glr and result.solutions > 1 else 'tree.dot'
        with open(f_name, 'w') as f:
            f.write(result.to_dot(positions))
        print('Created dot file ', f_name)
Example #6
0
def main(debug=False):
    this_folder = os.path.dirname(__file__)

    g = Grammar.from_file(os.path.join(this_folder, 'java16.pg'))
    parser = GLRParser(g, debug=debug, debug_colors=True)

    file_name = os.path.join(this_folder, 'TomcatServletWebServerFactory.java')
    file_size = os.path.getsize(file_name)

    t_start = time.time()
    forest = parser.parse_file(file_name)
    t_end = time.time()

    print('Elapsed time: {:.2f}'.format(t_end - t_start), 'sec')
    print('Speed = {:.2f}'.format(file_size / 1000 / (t_end - t_start)),
          'KB/sec\n')
    print('Solutions: ', forest.solutions)
    print('Ambiguities: ', forest.ambiguities)