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'))
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)
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)
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)
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)
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)