[][src]Constant lrl_test_compiler::test_descriptor::_PEST_GRAMMAR_TDFParser

const _PEST_GRAMMAR_TDFParser: &'static str = "// Ignore spaces and tabs\nWHITESPACE = _{ \" \" | \"\\t\" | \"\\r\" | \"\\n\" }\nCOMMENT = _{ \"#\" ~ (!\"\\n\" ~ ANY)* }\n\nNUM = @{ \"-\"? ~ \'0\'..\'9\' ~ (\'0\'..\'9\')* ~ (\".\" ~ (\'0\'..\'9\')+)? ~ ((\"e\"|\"E\") ~ (\"-\"|\"+\")? ~ (\'0\'..\'9\')+)? }\nBOOL = @{ \"true\" | \"false\" }\nID = @{ !KEYWORD ~ (\'a\'..\'z\' | \'A\'..\'Z\' | \"_\") ~ (\'a\'..\'z\' | \'A\'..\'Z\' | \'0\'..\'9\' | \"_\")* }\n\n// Restricted Keywords\nKEYWORD = @{ HARD_ABORT }\n\n// Tree\nTEST = { SOI ~ TEST_BODY ~ ABORT_SEQUENCE* ~ EOI }\n\nTEST_BODY = { \"test\" ~ \"{\" ~ STATEMENT* ~ \"}\" }\n\n\nABORT_SEQUENCE = { \"abort\" ~ USER_ABORT_NAME ~ \"{\" ~ STATEMENT* ~ \"}\" }\nUSER_ABORT_NAME = {!HARD_ABORT ~ ID}\nHARD_ABORT = @{ \"HARD_ABORT\" }\n\nSTATEMENT = { RELAY_STATEMENT | SENSOR_STATEMENT | SECTION_STATEMENT }\n\nMINUTE = { \"min\" }\nSECOND = { \"s\" }\nMILLISECOND = { \"ms\" }\nTIMING = { (NUM ~ (MINUTE | SECOND | MILLISECOND)) ~ (\"-\" ~ NUM ~ (SECOND | MILLISECOND))? ~ (\"-\" ~ NUM ~ (MILLISECOND))? }\n\nRELAY_STATEMENT = { RELAY_TIMING ~ RELAY_OP ~ ID }\nRELAY_TIMING = { \"at\" ~ TIMING }\nRELAY_OP = { \"set\" | \"unset\" }\n\nSENSOR_STATEMENT = { SENSOR_TIMING ~ \"require\" ~ \"{\" ~ SENSOR_CONSTRAINT_LIST ~ \"}\" ~ \"else\" ~ ( ID | HARD_ABORT ) }\nSENSOR_TIMING = { \"at\" ~ TIMING | \"from\" ~ TIMING ~ \"to\" ~ TIMING }\nSENSOR_CONSTRAINT_LIST = { SENSOR_CONSTRAINT ~ (\",\" ~ SENSOR_CONSTRAINT)* }\nSENSOR_CONSTRAINT = { SENSOR_CONSTRAINT_NUMERIC | SENSOR_CONSTRAINT_BOOLEAN  }\nSENSOR_CONSTRAINT_BOOLEAN = { ID ~ \"is\" ~ BOOL }\nSENSOR_CONSTRAINT_NUMERIC = { SENSOR_BOUND ~ \"<\" ~ ID ~ \"<\" ~ SENSOR_BOUND }\n\n// TODO not finalized\nSECTION_STATEMENT = { \"section\" ~ ID ~ SECTION_TIMING ~ \"{\" ~ STATEMENT* ~ \"}\" }\nSECTION_TIMING = { \"at\" ~ TIMING ~ \"for\"  ~ TIMING }\n\n// In the future, expand to handle expressions\nSENSOR_BOUND = { NUM ~ ID }";