add library parse function for jobshop2
- clean up problem_data
This commit is contained in:
parent
8c1d6e12be
commit
6d0f334350
|
@ -46,8 +46,8 @@ class JobShopProblem:
|
||||||
self.machines = machines
|
self.machines = machines
|
||||||
self.jobs = jobs
|
self.jobs = jobs
|
||||||
|
|
||||||
def __str__() -> str:
|
def __str__(self) -> str:
|
||||||
return name
|
return self.name
|
||||||
|
|
||||||
class JobShopVisitor(arpeggio.PTNodeVisitor):
|
class JobShopVisitor(arpeggio.PTNodeVisitor):
|
||||||
"""contains visitor functions needed for both jobshop1 (list of instances)
|
"""contains visitor functions needed for both jobshop1 (list of instances)
|
||||||
|
@ -83,7 +83,8 @@ class JobShopVisitor(arpeggio.PTNodeVisitor):
|
||||||
def visit_problem_data(self, node: arpeggio.ParseTreeNode, children: arpeggio.SemanticActionResults) -> JobShopProblem:
|
def visit_problem_data(self, node: arpeggio.ParseTreeNode, children: arpeggio.SemanticActionResults) -> JobShopProblem:
|
||||||
if self.debug:
|
if self.debug:
|
||||||
print("problem_data\nchildren:", children)
|
print("problem_data\nchildren:", children)
|
||||||
problem_data: List[List[Tuple(int, int)]] = [ children[i] for i in range(2, len(children))]
|
cleaned_data = list(filter(lambda x: type(x) is not str, children))
|
||||||
|
problem_data: List[List[Tuple(int, int)]] = [ cleaned_data[i] for i in range(2, len(cleaned_data))]
|
||||||
return JobShopProblem(children[0], children[1], problem_data)
|
return JobShopProblem(children[0], children[1], problem_data)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,25 @@
|
||||||
|
import arpeggio
|
||||||
from arpeggio.cleanpeg import ParserPEG
|
from arpeggio.cleanpeg import ParserPEG
|
||||||
|
from typing import List, Tuple, Sequence, Optional, Union
|
||||||
|
|
||||||
from common import grammar
|
from common import grammar, JobShopVisitor, JobShopProblem
|
||||||
|
|
||||||
parser = ParserPEG(grammar, "problem_data", skipws=False,debug=True)
|
class JobShop2Visitor(JobShopVisitor):
|
||||||
|
pass
|
||||||
|
|
||||||
with open('./inputdata/jobshop2/ta13') as jobdatafile:
|
def parse_jobshop2_file(filename: Union[str, bytes]) -> JobShopProblem:
|
||||||
jobdata : str = jobdatafile.read()
|
"""Open file with jobshop2-formatted data (single problem instance, no name & description),
|
||||||
print("zu parsender String:\n\v\v", jobdata)
|
parse it and return JobShopProblem"""
|
||||||
parse_tree = parser.parse(jobdata)
|
|
||||||
print(parse_tree)
|
with open(filename) as datafile:
|
||||||
|
inputdata: str = datafile.read()
|
||||||
|
parse_tree = parser.parse(inputdata)
|
||||||
|
return arpeggio.visit_parse_tree(parse_tree, JobShop2Visitor(debug=True))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print(parse_jobshop2_file('./inputdata/jobshop2/ta13').problem_data)
|
||||||
|
|
||||||
|
parser = ParserPEG(grammar, "problem_data", skipws=False)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
Loading…
Reference in a new issue