Axon Grammar
Legend
Legend for BNF Grammar:
:= is defined as <x> non-terminal "x" literal 'x' char literal [x] optional (x) grouping s-e inclusive char range x* zero or more times x+ one or more times x|x or
Productions
<topFunc> := <lambda-n> | <defcomp> <defcomp> := "defcomp" <cells> [<do>] "end" <cells> := [<cell> <nl>]* <cell> := <id> <dict> <expr> := <lambda> | <def> | <if> | <list> | <dict> | <do> | <return> | <throw> | <tryCatch> | <defcomp> | <assignExpr> <do> := "do" <exprs> "end" <exprs> := <expr> (<exprSep> <expr>)* <exprSep> := ";" | <nl> <var> := <qname> <qname> := [<id> "::" ] <id> <list> := "[" <listItems> "]" <listItems> := [ <expr> ("," <expr>)* [","] ] <dict> := "{" <dictItems> "}" <dictItems> := [ <dictItem> ("," <dictItem>)* [","] ] <dictItem> := <dictVal> | <dictMarker> | <dictRemove> <dictVal> := <idOrKeyword> ":" <expr> <dictMarker> := <idOrKeyword> <dictRemove> := "-" <idOrKeyword> <lambda> := <lambda-1> | <lambda-n> <lambda-1> := <id> "=>" <expr> <lambda-n> := "(" <params> ")" "=>" <expr> <params> := [<param> ("," <param>)*] <param> := <id> [":" <expr>] <def> := <id> ":" <expr> <if> := "if" "(" <expr> ")" <expr> ["else" <expr>] <return> := "return" <expr> <throw> := "throw" <expr> <tryCatch> := "try" <expr> "catch" ["(" <id> ")"] <expr> <defcomp> := "compdef [<compcell>] [<do>] "end" <compcell> := <id> ":" <dict> <assignExpr> := <condOrExpr> ("=" <assignExpr>) <condOrExpr> := <condAndExpr> ("and" <condAndExpr>)* <condAndExpr> := <compareExpr> ("or" <compareExpr>)* <compareExpr> := <rangeExpr> (("==" | "!=" | "<" | "<=" | ">=" | ">" | "<=>") <rangeExpr>)* <rangeExpr> := <addExpr> ".." <addExpr> <addExpr> := <multExpr> (("+" | "-") <multExpr>)* <multExpr> := <unaryExpr> (("*" | "/") <unaryExpr>)* <unaryExpr> := ("-" | "not") <termExpr> <termExpr> := <termBase> <termChain>* <termBase> := <var> | <groupedExpr> | <literal> | <typeRef> <groupedExpr> := "(" <expr> ")" <termChain> := <call> | <dotCall> | <index> | <trapCall> <call> := "(" [<callArg> ("," <callArg>)*] [<lambda>] <callArg> := <expr> | "_" <dotCall> := "." [<nl>] <qname> [<call> | <lamdba-1>] <index> := "[" <expr> "]" <trapCall> := "->" <id> <typeRef> := [<typeLibName> "::"] <typename> <typeLibName> := <id> ("." <id>)* <literal> := <null> | <bool> | <number> | <str> | <date> | <time> | <month> | <recId> <idOrKeyword> := <id> | <keyword> <keyword> := "and" | "catch" | "defcomp" | "deflinks" | "do" | "else" | "end" | "false" | "if" | "not" | "null" | "or" | "return" | "throw" | "true" | "try"
Tokens
<bool> := "true" | "false" <null> := "null" <id> := <idFirst> (<idRest>)* <idFirst> := alphaLo <idRest> := alphaLo | alphaHi | digit | '_' <typename> := <alphaHi> (<idRest>)* <alphaLo> := ('a' - 'z') <alphaHi> := ('Z' - 'Z') <digit> := ('0' - '9') <digits> := <digit> (<digit> | "_")* <number> := <hex> | <decimal> <hex> := "0x" <hexDigit> (<hexDigit> | "_")* <hexDigit> := ('a'-'f') | ('A'-'F') | digit <decimal> := ["-"] <digits> ["." <digits>] [<exp>] [<unit>] <exp> := "e"|"E" ["+"|"-"] <digits> <unit> := <unitChar>* <unitChar> := <alpha> | "%" | "_" | "/" | "$" | any char > 128 // see sys::Unit <str> := see Fantom grammar (single line single quote, and multi-line triple quote) <date> := yyyy-mm-dd <time> := [h]h:mm[:ss[.fff]] // hour and secs optional <month> := yyyy-mm <ref> := "@" refChar (refChar)* <symbol> := "^" refChar (refChar)* <refChar> := <alpha> | <digit> | '_' | ':' | '.' | '~' | '-' <nl> := newline "\n"