def init_grammar(self): """Set up the parsing classes Any changes to the grammar of the config file be done here. """ # Some syntax that we need, but don't care about SEMICOLON = (Suppress(";")) EQUALS = Suppress("=") # Top Section FILE_NAME = Word(alphas + nums + '-_.') alignment_def = Keyword('alignment') + EQUALS\ + FILE_NAME + SEMICOLON alignment_def.setParseAction(self.set_alignment) tree_def = Keyword('user_tree_topology') + EQUALS\ + FILE_NAME + SEMICOLON tree_def.setParseAction(self.set_user_tree) def simple_option(name): opt = Keyword(name) + EQUALS +\ Word(alphas + nums + '-_') + SEMICOLON opt.setParseAction(self.set_simple_option) return opt branch_def = simple_option('branchlengths') MODEL_NAME = Word(alphas + nums + '+' + ' ' + '_') model_list = delimitedList(MODEL_NAME) model_def = 'models' + EQUALS + model_list + SEMICOLON model_def.setParseAction(self.set_models) model_selection_def = simple_option("model_selection") top_section = alignment_def + Optional(tree_def) + branch_def + \ model_def + model_selection_def # Data Block Parsing column = Word(nums) block_name = Word(alphas + '_-' + nums) block_def = column("start") +\ Optional(Suppress("-") + column("end")) +\ Optional(Suppress("\\") + column("step")) block_def.setParseAction(self.define_range) block_list_def = Group(OneOrMore(Group(block_def))) user_subset_def = Optional("charset") + block_name("name") + \ EQUALS + block_list_def("parts") + SEMICOLON user_subset_def.setParseAction(self.define_user_subset) block_def_list = OneOrMore(Group(user_subset_def)) block_section = Suppress("[data_blocks]") + block_def_list block_def_list.setParseAction(self.check_blocks) # Scheme Parsing scheme_name = Word(alphas + '_-' + nums) # Make a copy, cos we set a different action on it user_subset_ref = block_name.copy() user_subset_ref.setParseAction(self.check_block_exists) subset = Group(Suppress("(") + delimitedList(user_subset_ref("name")) + Suppress(")")) subset.setParseAction(self.define_subset_grouping) scheme = Group(OneOrMore(subset)) scheme_def = scheme_name("name") + \ EQUALS + scheme("scheme") + SEMICOLON scheme_def.setParseAction(self.define_scheme) scheme_list = OneOrMore(Group(scheme_def)) scheme_algo = simple_option("search") scheme_section = \ Suppress("[schemes]") + scheme_algo + Optional(scheme_list) # We've defined the grammar for each section. # Here we just put it all together self.config_parser = ( top_section + block_section + scheme_section + stringEnd)
def init_grammar(self): """Set up the parsing classes Any changes to the grammar of the config file be done here. """ # Some syntax that we need, but don't bother looking at SEMICOLON = (Suppress(";")) EQUALS = Suppress("=") OPENB = Suppress("(") CLOSEB = Suppress(")") BACKSLASH = Suppress("\\") DASH = Suppress("-") # Top Section FILENAME = Word(alphas + nums + '-_.') alignmentdef = Keyword('alignment') + EQUALS + FILENAME + SEMICOLON alignmentdef.setParseAction(self.set_alignment) treedef = Keyword('user_tree_topology') + EQUALS + FILENAME + SEMICOLON treedef.setParseAction(self.set_user_tree) def simple_option(name): opt = Keyword(name) + EQUALS + Word(alphas + nums + '-_') + SEMICOLON opt.setParseAction(self.set_simple_option) return opt branchdef = simple_option('branchlengths') MODELNAME = Word(alphas + nums + '+') modellist = delimitedList(MODELNAME) modeldef = Keyword("models") + EQUALS + Group( (CaselessKeyword("all") | CaselessKeyword("mrbayes") | CaselessKeyword("raxml") | CaselessKeyword("beast") | CaselessKeyword("all_protein") | CaselessKeyword("all_protein_gamma") | CaselessKeyword("all_protein_gammaI"))("predefined") | Group(modellist)("userlist")) + SEMICOLON modeldef.setParseAction(self.set_models) modseldef = simple_option("model_selection") topsection = alignmentdef + Optional(treedef) + branchdef + \ modeldef + modseldef # Partition Parsing column = Word(nums) partname = Word(alphas + '_-' + nums) partdef = column("start") +\ Optional(DASH + column("end")) +\ Optional(BACKSLASH + column("step")) partdef.setParseAction(self.define_range) partdeflist = Group(OneOrMore(Group(partdef))) partition = Optional("charset") + partname("name") + \ EQUALS + partdeflist("parts") + SEMICOLON partition.setParseAction(self.define_partition) partlist = OneOrMore(Group(partition)) partsection = Suppress("[data_blocks]") + partlist # Scheme Parsing schemename = Word(alphas + '_-' + nums) partnameref = partname.copy( ) # Make a copy, cos we set a different action on it partnameref.setParseAction(self.check_part_exists) subset = Group(OPENB + delimitedList(partnameref("name")) + CLOSEB) subset.setParseAction(self.define_subset) scheme = Group(OneOrMore(subset)) schemedef = schemename("name") + \ EQUALS + scheme("scheme") + SEMICOLON schemedef.setParseAction(self.define_schema) schemelist = OneOrMore(Group(schemedef)) schemealgo = simple_option("search") schemesection = \ Suppress("[schemes]") + schemealgo + Optional(schemelist) # We've defined the grammar for each section. Here we just put it all together self.config_parser = (topsection + partsection + schemesection + stringEnd)
def init_grammar(self): """Set up the parsing classes Any changes to the grammar of the config file be done here. """ # Some syntax that we need, but don't care about SEMICOLON = (Suppress(";")) EQUALS = Suppress("=") # Top Section FILE_NAME = Word(alphas + nums + '-_.') alignment_def = Keyword('alignment') + EQUALS\ + FILE_NAME + SEMICOLON alignment_def.setParseAction(self.set_alignment) tree_def = Keyword('user_tree_topology') + EQUALS\ + FILE_NAME + SEMICOLON tree_def.setParseAction(self.set_user_tree) def simple_option(name): opt = Keyword(name) + EQUALS +\ Word(alphas + nums + '-_') + SEMICOLON opt.setParseAction(self.set_simple_option) return opt branch_def = simple_option('branchlengths') MODEL_NAME = Word(alphas + nums + '+' + ' ' + '_') model_list = delimitedList(MODEL_NAME) model_def = 'models' + EQUALS + model_list + SEMICOLON model_def.setParseAction(self.set_models) model_selection_def = simple_option("model_selection") top_section = alignment_def + Optional(tree_def) + branch_def + \ model_def + model_selection_def # Data Block Parsing column = Word(nums) block_name = Word(alphas + '_-' + nums) block_def = column("start") +\ Optional(Suppress("-") + column("end")) +\ Optional(Suppress("\\") + column("step")) block_def.setParseAction(self.define_range) block_list_def = Group(OneOrMore(Group(block_def))) user_subset_def = Optional("charset") + block_name("name") + \ EQUALS + block_list_def("parts") + SEMICOLON user_subset_def.setParseAction(self.define_user_subset) block_def_list = OneOrMore(Group(user_subset_def)) block_section = Suppress("[data_blocks]") + block_def_list block_def_list.setParseAction(self.check_blocks) # Scheme Parsing scheme_name = Word(alphas + '_-' + nums) # Make a copy, cos we set a different action on it user_subset_ref = block_name.copy() user_subset_ref.setParseAction(self.check_block_exists) subset = Group( Suppress("(") + delimitedList(user_subset_ref("name")) + Suppress(")")) subset.setParseAction(self.define_subset_grouping) scheme = Group(OneOrMore(subset)) scheme_def = scheme_name("name") + \ EQUALS + scheme("scheme") + SEMICOLON scheme_def.setParseAction(self.define_scheme) scheme_list = OneOrMore(Group(scheme_def)) scheme_algo = simple_option("search") scheme_section = \ Suppress("[schemes]") + scheme_algo + Optional(scheme_list) # We've defined the grammar for each section. # Here we just put it all together self.config_parser = (top_section + block_section + scheme_section + stringEnd)
def init_grammar(self): """Set up the parsing classes Any changes to the grammar of the config file be done here. """ # Some syntax that we need, but don't bother looking at SEMICOLON = (Suppress(";")) EQUALS = Suppress("=") OPENB = Suppress("(") CLOSEB = Suppress(")") BACKSLASH = Suppress("\\") DASH = Suppress("-") # Top Section FILENAME = Word(alphas + nums + '-_.') alignmentdef = Keyword('alignment') + EQUALS + FILENAME + SEMICOLON alignmentdef.setParseAction(self.set_alignment) treedef = Keyword('user_tree_topology') + EQUALS + FILENAME + SEMICOLON treedef.setParseAction(self.set_user_tree) def simple_option(name): opt = Keyword(name) + EQUALS + Word(alphas + nums + '-_') + SEMICOLON opt.setParseAction(self.set_simple_option) return opt branchdef = simple_option('branchlengths') MODELNAME = Word(alphas + nums + '+') modellist = delimitedList(MODELNAME) modeldef = Keyword("models") + EQUALS + Group( ( CaselessKeyword("all") | CaselessKeyword("mrbayes") | CaselessKeyword("raxml") | CaselessKeyword("beast") | CaselessKeyword("all_protein") | CaselessKeyword( "all_protein_gamma") | CaselessKeyword("all_protein_gammaI") )("predefined") | Group(modellist)("userlist")) + SEMICOLON modeldef.setParseAction(self.set_models) modseldef = simple_option("model_selection") topsection = alignmentdef + Optional(treedef) + branchdef + \ modeldef + modseldef # Partition Parsing column = Word(nums) partname = Word(alphas + '_-' + nums) partdef = column("start") +\ Optional(DASH + column("end")) +\ Optional(BACKSLASH + column("step")) partdef.setParseAction(self.define_range) partdeflist = Group(OneOrMore(Group(partdef))) partition = Optional("charset") + partname("name") + \ EQUALS + partdeflist("parts") + SEMICOLON partition.setParseAction(self.define_partition) partlist = OneOrMore(Group(partition)) partsection = Suppress("[data_blocks]") + partlist # Scheme Parsing schemename = Word(alphas + '_-' + nums) partnameref = partname.copy( ) # Make a copy, cos we set a different action on it partnameref.setParseAction(self.check_part_exists) subset = Group(OPENB + delimitedList(partnameref("name")) + CLOSEB) subset.setParseAction(self.define_subset) scheme = Group(OneOrMore(subset)) schemedef = schemename("name") + \ EQUALS + scheme("scheme") + SEMICOLON schemedef.setParseAction(self.define_schema) schemelist = OneOrMore(Group(schemedef)) schemealgo = simple_option("search") schemesection = \ Suppress("[schemes]") + schemealgo + Optional(schemelist) # We've defined the grammar for each section. Here we just put it all together self.config_parser = ( topsection + partsection + schemesection + stringEnd)