This page requires javascript to work

[][src]Constant minitt::parser::_PEST_GRAMMAR_MiniParser

const _PEST_GRAMMAR_MiniParser: &'static str = "// Lexical rules\nWHITESPACE = _{ \" \" | \"\\t\" | NEWLINE | (\"--\" ~ (!NEWLINE ~ ANY)*) }\n\n// Primitive helpers\ncharacter =\n _{ ASCII_ALPHA\n  | \"_\"\n  | \"\\\'\"\n  | \"\\\\\"\n  | \'0\'..\'9\'\n  }\nidentifier_simple =\n @{ !\"let\"\n  ~ !\"rec\"\n  ~ !\"split\"\n  ~ !\"const\"\n  ~ !\"\\\\lambda\"\n  ~ !\"\\\\Sigma\"\n  ~ !\"\\\\Pi\"\n  ~ !\"0\"\n  ~ !\"1\"\n  ~ !\"_\"\n  ~ character+\n  }\nidentifier_raw =\n @{ (\"split\" ~ character+)\n  | (\"let\" ~ character+)\n  | (\"rec\" ~ character+)\n  | (\"const\" ~ character+)\n  | (\"0\" ~ character+)\n  | (\"1\" ~ character+)\n  | (\"_\" ~ character+)\n  }\nidentifier = { identifier_simple | identifier_raw }\nconstructor_name = @{ ASCII_ALPHA_UPPER ~ identifier? }\nlevel = { ASCII_DIGIT* }\npi = _{ \"\\\\Pi\" | \"\\u{03A0}\" }\nsigma = _{ \"\\\\Sigma\" | \"\\u{03A3}\" }\nlambda = _{ \"\\\\lambda\" | \"\\u{03BB}\" }\nmultiplication = _{ \"*\" | \"\\\\times\" | \"\\xd7\" | \"\\u{2716}\" }\nfor_all = _{ \"\\\\forall\" | \"\\u{2200}\" }\ndouble_arrow = _{ \"=>\" | \"\\u{21d2}\" }\nsingle_arrow = _{ \"->\" | \"\\u{2192}\" }\n///#E0957B\nlet_or_rec = { \"let\" | \"rec\" }\n///#E0957B\none = { \"1\" }\n///#E0957B\nunit = { \"0\" }\n///Cyan\nuniverse = ${ \"Type\" ~ level }\nvoid = { EOI }\nmeta_var = { \"_\" }\n\n// Prefixed parameters\nprefix_parameter = { \"(\" ~ typed_pattern ~ \")\" }\nprefix_parameters = { prefix_parameter* }\n\n// Patterns\natom_pattern = { identifier | meta_var | \"(\" ~ pattern ~ \")\" }\npair_pattern = { atom_pattern ~ \",\" ~ pattern }\n///Orange\npattern = { pair_pattern | atom_pattern }\nmaybe_pattern = { pattern? }\n\n// Extracted helpers\ntyped_pattern = _{ pattern ~ \":\" ~ expression }\ntyped_abstraction = _{ typed_pattern ~ \".\" ~ expression }\nbranches = _{ \"{\" ~ (constructor ~ (\"|\" ~ constructor)*)? ~ \"}\" }\nchoices = _{ \"{\" ~ (pattern_match ~ (\"|\" ~ pattern_match)*)? ~ \"}\" }\n\n// Atomic expressions\npi_type = { pi ~ typed_abstraction }\nlambda_expression = { lambda ~ pattern ~ \".\" ~ expression }\nconstructor = { constructor_name ~ expression? }\npattern_match =\n { constructor_name\n ~ maybe_pattern\n ~ double_arrow\n ~ expression\n }\nsigma_type = { sigma ~ typed_abstraction }\nsplit = { \"split\" ~ choices }\nsum = { \"Sum\" ~ branches }\nvariable = { identifier }\natom =\n  { universe\n  | sum\n  | constructor\n  | variable\n  | split\n  | one\n  | unit\n  | pi_type\n  | sigma_type\n  | lambda_expression\n  | \"(\" ~ expression ~ \")\"\n  }\n\n// Syntactic sugars: short-hand for unit patterns\nfunction_type = { atom ~ single_arrow ~ expression }\npair_type = { atom ~ multiplication ~ expression }\n\n// Higher-level expressions\napplication = { atom ~ expression }\npair = { atom ~ \",\" ~ expression }\nmerge_sum = { atom ~ \"++\" ~ expression }\nfirst = { atom ~ \".1\" }\nsecond = { atom ~ \".2\" }\nexpression =\n { declaration\n | const_declaration\n | merge_sum\n | application\n | function_type\n | pair_type\n | first\n | second\n | pair\n | atom\n }\n\n// Declaration\nconst_declaration =\n { \"const\"\n ~ pattern\n ~ \"=\" ~ expression\n ~ \";\" ~ expression?\n }\ndeclaration =\n { let_or_rec\n ~ pattern\n ~ prefix_parameters\n ~ \":\" ~ expression\n ~ \"=\" ~ expression\n ~ \";\" ~ expression?\n }\n\n// File\nfile = { WHITESPACE* ~ expression }\n";