From 632e908f95fcd6ed42d5b86296eaaf96ad402b73 Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Sun, 25 Jun 2017 00:58:58 +0200 Subject: [PATCH] moved common grammar to separate file --- src/JobShopParser/common.py | 22 ++++++++++++++++++++++ src/JobShopParser/jobshop1_parser.py | 25 ++----------------------- src/JobShopParser/jobshop2_parser.py | 13 +------------ 3 files changed, 25 insertions(+), 35 deletions(-) create mode 100644 src/JobShopParser/common.py diff --git a/src/JobShopParser/common.py b/src/JobShopParser/common.py new file mode 100644 index 0000000..40ec164 --- /dev/null +++ b/src/JobShopParser/common.py @@ -0,0 +1,22 @@ +grammar = """ + job_shop1 = skip_preface + skip_preface = instance_list / (r"." skip_preface) + instance_list = problem_instance (sep_line trim_ws eol problem_instance eol?)* eof_sep + problem_instance = trim_ws "instance" ' ' instance_name trim_ws eol trim_ws eol sep_line description eol problem_data + description = r"[^\n]*" + instance_name = r"\w+" + sep_line = trim_ws plus_line trim_ws eol + plus_line = r"\+\+\++" + eof_sep = trim_ws plus_line " EOF " plus_line trim_ws eol* EOF + + job_shop2 = problem_data EOF + problem_data = trim_ws num_jobs ' ' num_machines eol job_data+ + trim_ws = r'[ \t]*' + eol = "\n" / "\r\n" + nonneg_num = r'\d+' + num_jobs = nonneg_num + num_machines = nonneg_num + machine = nonneg_num + duration = nonneg_num + job_data = ' '* machine ' '+ duration (' '+ machine ' '+ duration)* trim_ws eol + """ diff --git a/src/JobShopParser/jobshop1_parser.py b/src/JobShopParser/jobshop1_parser.py index 46daeff..333435a 100644 --- a/src/JobShopParser/jobshop1_parser.py +++ b/src/JobShopParser/jobshop1_parser.py @@ -1,29 +1,8 @@ from arpeggio.cleanpeg import ParserPEG -grammar = """ - start = skip_preface - skip_preface = instance_list / (r"." skip_preface) - instance_list = problem_instance (sep_line trim_ws eol problem_instance eol?)* eof_sep - problem_instance = trim_ws "instance" ' ' instance_name trim_ws eol trim_ws eol sep_line description eol problem_data - description = r"[^\n]*" - instance_name = r"\w+" - sep_line = trim_ws plus_line trim_ws eol - plus_line = r"\+\+\++" - eof_sep = trim_ws plus_line " EOF " plus_line trim_ws eol* EOF +from common import grammar - job_shop2 = problem_data EOF - problem_data = trim_ws num_jobs ' ' num_machines eol job_data+ - trim_ws = r'[ \t]*' - eol = "\n" / "\r\n" - nonneg_num = r'\d+' - num_jobs = nonneg_num - num_machines = nonneg_num - machine = nonneg_num - duration = nonneg_num - job_data = ' '* machine ' '+ duration (' '+ machine ' '+ duration)* trim_ws eol - """ - -parser = ParserPEG(grammar, "start", skipws=False,debug=True) +parser = ParserPEG(grammar, "job_shop1", skipws=False,debug=True) with open("./inputdata/jobshop1_noprefix.txt") as datafile: inputdata : str = datafile.read() diff --git a/src/JobShopParser/jobshop2_parser.py b/src/JobShopParser/jobshop2_parser.py index 750b8d7..78d3790 100644 --- a/src/JobShopParser/jobshop2_parser.py +++ b/src/JobShopParser/jobshop2_parser.py @@ -1,17 +1,6 @@ from arpeggio.cleanpeg import ParserPEG -grammar = """ -job_shop2 = problem_data EOF -problem_data = trim_ws num_jobs ' ' num_machines eol job_data+ -trim_ws = r'[ \t]*' -eol = "\n" / "\r\n" -nonneg_num = r'\d+' -num_jobs = nonneg_num -num_machines = nonneg_num -machine = nonneg_num -duration = nonneg_num -job_data = ' '* machine ' '+ duration (' '+ machine ' '+ duration)* trim_ws eol -""" +from common import grammar parser = ParserPEG(grammar, "problem_data", skipws=False,debug=True)