obj_tables/chem/reaction_equation.lark
start: gbl | lcl
// global compartment
gbl: / *\[ */ SPECIES_STOICHIOMETRY__SPECIES__COMPARTMENT__ID / *\] *: */ gbl_reactants? / *<=> */ gbl_products? WS*
gbl_reactants: gbl_parts
gbl_products: gbl_parts
gbl_parts: gbl_part (/ *\+ */ gbl_part)*
gbl_part: (/\( */ SPECIES_STOICHIOMETRY__STOICHIOMETRY / *\) */)? SPECIES_STOICHIOMETRY__SPECIES__SPECIES_TYPE__ID
// local compartments
lcl: lcl_reactants? / *<=> */ lcl_products? WS*
lcl_reactants: lcl_parts
lcl_products: lcl_parts
lcl_parts: lcl_part (/ *\+ */ lcl_part)*
lcl_part: (/\( */ SPECIES_STOICHIOMETRY__STOICHIOMETRY / *\) */)? SPECIES_STOICHIOMETRY__SPECIES__SPECIES_TYPE__ID / *\[ */ SPECIES_STOICHIOMETRY__SPECIES__COMPARTMENT__ID / *\] */
// tokens
SPECIES_STOICHIOMETRY__SPECIES__SPECIES_TYPE__ID: SLUG
SPECIES_STOICHIOMETRY__SPECIES__COMPARTMENT__ID: SLUG
SPECIES_STOICHIOMETRY__STOICHIOMETRY: FLOAT
SLUG: /(?!(^|\b)(\d+(\.\d*)?(\b|$))|(\.\d+$)|(0[xX][0-9a-fA-F]+(\b|$))|([0-9]+[eE][0-9]+(\b|$)))[a-zA-Z0-9_\-]+/
FLOAT: /([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][-+]?[0-9]+)?/
WS: " "