2010-03-07 00:28:58 -05:00
<!DOCTYPE html> < html > < head > < title > grammar.coffee< / title > < meta http-equiv = "content-type" content = "text/html; charset=UTF-8" > < link rel = "stylesheet" media = "all" href = "docco.css" / > < / head > < body > < div id = "container" > < div id = "jump_to" > Jump To … < div id = "jump_wrapper" > < div id = "jump_page" > < a class = "source" href = "cake.html" > cake.coffee < / a > < a class = "source" href = "coffee-script.html" > coffee-script.coffee < / a > < a class = "source" href = "command.html" > command.coffee < / a > < a class = "source" href = "grammar.html" > grammar.coffee < / a > < a class = "source" href = "lexer.html" > lexer.coffee < / a > < a class = "source" href = "nodes.html" > nodes.coffee < / a > < a class = "source" href = "optparse.html" > optparse.coffee < / a > < a class = "source" href = "repl.html" > repl.coffee < / a > < a class = "source" href = "rewriter.html" > rewriter.coffee < / a > < a class = "source" href = "scope.html" > scope.coffee < / a > < / div > < / div > < / div > < table cellpadding = "0" cellspacing = "0" > < thead > < tr > < th class = "docs" > < h1 > grammar.coffee < / h1 > < / th > < th class = "code" > < / th > < / tr > < / thead > < tbody > < tr id = "section-1" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-1" > #< / a > < / div > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Parser: < / span > < span class = "nx" > require< / span > < span class = "p" > (< / span > < span class = "s1" > ' jison' < / span > < span class = "p" > ).< / span > < span class = "nx" > Parser< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-2" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-2" > #< / a > < / div > < p > DSL ===================================================================< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < / pre > < / div > < / td > < / tr > < tr id = "section-3" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-3" > #< / a > < / div > < p > Detect functions: [< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > unwrap: < / span > < span class = "sr" > /function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-4" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-4" > #< / a > < / div > < p > Quickie DSL for Jison access.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > o: < / span > < span class = "p" > (< / span > < span class = "nx" > pattern_string< / span > < span class = "p" > ,< / span > < span class = "nx" > func< / span > < span class = "p" > ,< / span > < span class = "nx" > options< / span > < span class = "p" > )< / span > < span class = "o" > -> < / span >
2010-03-06 23:48:06 -05:00
< span class = "k" > if< / span > < span class = "nx" > func< / span >
< span class = "nv" > func: < / span > < span class = "k" > if< / span > < span class = "nv" > match: < / span > < span class = "p" > (< / span > < span class = "nx" > func< / span > < span class = "o" > +< / span > < span class = "s1" > ' ' < / span > < span class = "p" > ).< / span > < span class = "nx" > match< / span > < span class = "p" > (< / span > < span class = "nx" > unwrap< / span > < span class = "p" > )< / span > < span class = "k" > then< / span > < span class = "nx" > match< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "k" > else< / span > < span class = "s2" > " ($func())" < / span >
< span class = "p" > [< / span > < span class = "nx" > pattern_string< / span > < span class = "p" > ,< / span > < span class = "s2" > " $$ = $func;" < / span > < span class = "p" > ,< / span > < span class = "nx" > options< / span > < span class = "p" > ]< / span >
< span class = "k" > else< / span >
< span class = "p" > [< / span > < span class = "nx" > pattern_string< / span > < span class = "p" > ,< / span > < span class = "s1" > ' $$ = $1;' < / span > < span class = "p" > ,< / span > < span class = "nx" > options< / span > < span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-5" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-5" > #< / a > < / div > < p > Precedence ===========================================================< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > operators: < / span > < span class = "p" > [< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " nonassoc" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' UMINUS' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' UPLUS' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' NOT' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' !' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' !!' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ~' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ++' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' --' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' *' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' /' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' %' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' +' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' -' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' < < ' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' > > ' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' > > > ' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' & ' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' |' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ^' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' < =' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' < ' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' > ' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' > =' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " right" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' DELETE' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' INSTANCEOF' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' TYPEOF' < / span > < span class = "p" > ]< / span >
2010-03-07 00:28:58 -05:00
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ==' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' !=' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' IS' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ISNT' < / span > < span class = "p" > ]< / span >
2010-03-06 23:48:06 -05:00
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' & & ' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ||' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' AND' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' OR' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " right" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' -=' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' +=' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' /=' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' *=' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' %=' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ||=' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' & & =' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ?=' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' .' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " right" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' INDENT' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' OUTDENT' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " right" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' WHEN' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' LEADING_WHEN' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' IN' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' OF' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' BY' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' THROW' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " right" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' FOR' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' NEW' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' SUPER' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' CLASS' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " left" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' EXTENDS' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " right" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ASSIGN' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' RETURN' < / span > < span class = "p" > ]< / span >
< span class = "p" > [< / span > < span class = "s2" > " right" < / span > < span class = "p" > ,< / span > < span class = "s1" > ' -> ' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' => ' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' UNLESS' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' IF' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' ELSE' < / span > < span class = "p" > ,< / span > < span class = "s1" > ' WHILE' < / span > < span class = "p" > ]< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-6" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-6" > #< / a > < / div > < p > Grammar ==============================================================< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > grammar: < / span > < span class = "p" > {< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-7" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-7" > #< / a > < / div > < p > All parsing will end in this rule, being the trunk of the AST.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Root: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " " < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > Expressions< / span > < span class = "p" > ()< / span >
< span class = "nx" > o< / span > < span class = "s2" > " TERMINATOR" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > Expressions< / span > < span class = "p" > ()< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expressions" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Block TERMINATOR" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-8" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-8" > #< / a > < / div > < p > Any list of expressions or method body, seperated by line breaks or semis.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Expressions: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > Expressions< / span > < span class = "p" > .< / span > < span class = "nx" > wrap< / span > < span class = "p" > ([< / span > < span class = "nx" > $1< / span > < span class = "p" > ])< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expressions TERMINATOR Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > push< / span > < span class = "p" > (< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expressions TERMINATOR" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-9" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-9" > #< / a > < / div > < p > All types of expressions in our language. The basic unit of CoffeeScript
is the expression.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Expression: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Value" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Call" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Code" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Operation" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Assign" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " If" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Try" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Throw" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Return" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " While" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " For" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Switch" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Extends" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Class" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Splat" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Existence" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Comment" < / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-10" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-10" > #< / a > < / div > < p > A block of expressions. Note that the Rewriter will convert some postfix
forms into blocks for us, by altering the token stream.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Block: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " INDENT Expressions OUTDENT" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $2< / span >
< span class = "nx" > o< / span > < span class = "s2" > " INDENT OUTDENT" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > Expressions< / span > < span class = "p" > ()< / span >
< span class = "p" > ]< / span >
< span class = "nv" > Identifier: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " IDENTIFIER" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span >
< span class = "nv" > AlphaNumeric: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " NUMBER" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " STRING" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-11" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-11" > #< / a > < / div > < p > All hard-coded values. These can be printed straight to JavaScript.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Literal: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " AlphaNumeric" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " JS" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " REGEX" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " BREAK" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " CONTINUE" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " TRUE" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "kc" > true< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " FALSE" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "kc" > false< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " YES" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "kc" > true< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " NO" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "kc" > false< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ON" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "kc" > true< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " OFF" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "kc" > false< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-12" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-12" > #< / a > < / div > < p > Assignment to a variable (or index).< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Assign: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Value ASSIGN Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > AssignNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-13" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-13" > #< / a > < / div > < p > Assignment within an object literal (can be quoted).< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > AssignObj: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Identifier ASSIGN Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > AssignNode< / span > < span class = "p" > (< / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > ),< / span > < span class = "nx" > $3< / span > < span class = "p" > ,< / span > < span class = "s1" > ' object' < / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " AlphaNumeric ASSIGN Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > AssignNode< / span > < span class = "p" > (< / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > ),< / span > < span class = "nx" > $3< / span > < span class = "p" > ,< / span > < span class = "s1" > ' object' < / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Comment" < / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-14" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-14" > #< / a > < / div > < p > A return statement.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Return: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " RETURN Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ReturnNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " RETURN" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ReturnNode< / span > < span class = "p" > (< / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' null' < / span > < span class = "p" > )))< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-15" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-15" > #< / a > < / div > < p > A comment.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Comment: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " COMMENT" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > CommentNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-16" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-16" > #< / a > < / div > < p > Arithmetic and logical operators
For Ruby's Operator precedence, see: [
< a href = 'https://www.cs.auckland.ac.nz/references/ruby/ProgrammingRuby/language.html' > https://www.cs.auckland.ac.nz/references/ruby/ProgrammingRuby/language.html< / a > < / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Operation: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ! Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' !' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " !! Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' !!' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "p" > (< / span > < span class = "s2" > " - Expression" < / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' -' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )),< / span > < span class = "p" > {< / span > < span class = "nv" > prec: < / span > < span class = "s1" > ' UMINUS' < / span > < span class = "p" > })< / span >
< span class = "nx" > o< / span > < span class = "p" > (< / span > < span class = "s2" > " + Expression" < / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' +' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )),< / span > < span class = "p" > {< / span > < span class = "nv" > prec: < / span > < span class = "s1" > ' UPLUS' < / span > < span class = "p" > })< / span >
< span class = "nx" > o< / span > < span class = "s2" > " NOT Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' not' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ~ Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ~' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " -- Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' --' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ++ Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ++' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " DELETE Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' delete' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " TYPEOF Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' typeof' < / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression --" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' --' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "kc" > true< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression ++" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ++' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "kc" > true< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression * Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' *' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression / Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' /' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression % Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' %' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression + Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' +' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression - Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' -' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression < < Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' < < ' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression > > Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' > > ' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression > > > Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' > > > ' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression & Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' & ' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression | Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' |' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression ^ Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ^' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression < = Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' < =' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression < Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' < ' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression > Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' > ' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression > = Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' > =' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression == Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ==' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression != Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' !=' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression IS Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' is' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression ISNT Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' isnt' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression & & Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' & & ' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression || Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ||' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression AND Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' and' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression OR Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' or' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression ? Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ?' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression -= Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' -=' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression += Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' +=' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression /= Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' /=' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression *= Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' *=' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression %= Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' %=' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression ||= Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ||=' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression & & = Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' & & =' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression ?= Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' ?=' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression INSTANCEOF Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' instanceof' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression IN Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > OpNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' in' < / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-17" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-17" > #< / a > < / div > < p > The existence operator.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Existence: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression ?" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ExistenceNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-18" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-18" > #< / a > < / div > < p > Function definition.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Code: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " PARAM_START ParamList PARAM_END FuncGlyph Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > CodeNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $5< / span > < span class = "p" > ,< / span > < span class = "nx" > $4< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " FuncGlyph Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > CodeNode< / span > < span class = "p" > ([],< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-19" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-19" > #< / a > < / div > < p > The symbols to signify functions, and bound functions.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > FuncGlyph: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " -> " < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "s1" > ' func' < / span >
< span class = "nx" > o< / span > < span class = "s2" > " => " < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "s1" > ' boundfunc' < / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-20" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-20" > #< / a > < / div > < p > The parameters to a function definition.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > ParamList: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " " < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > []< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Param" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > [< / span > < span class = "nx" > $1< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ParamList , Param" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > [< / span > < span class = "nx" > $3< / span > < span class = "p" > ]< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-21" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-21" > #< / a > < / div > < p > A Parameter (or ParamSplat) in a function definition.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Param: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " PARAM" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "nx" > yytext< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Param . . ." < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > SplatNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-22" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-22" > #< / a > < / div > < p > A regular splat.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Splat: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression . . ." < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > SplatNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-23" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-23" > #< / a > < / div > < p > Expressions that can be treated as values.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Value: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Identifier" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Literal" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Array" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Object" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Parenthetical" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Range" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " This" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Value Accessor" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > push< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Invocation Accessor" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "p" > [< / span > < span class = "nx" > $2< / span > < span class = "p" > ])< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-24" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-24" > #< / a > < / div > < p > Accessing into an object or array, through dot or index notation.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Accessor: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " PROPERTY_ACCESS Identifier" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > AccessorNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " PROTOTYPE_ACCESS Identifier" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > AccessorNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "s1" > ' prototype' < / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " SOAK_ACCESS Identifier" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > AccessorNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "s1" > ' soak' < / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Index" < / span >
< span class = "nx" > o< / span > < span class = "s2" > " Slice" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > SliceNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-25" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-25" > #< / a > < / div > < p > Indexing into an object or array.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Index: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " INDEX_START Expression INDEX_END" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > IndexNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " SOAKED_INDEX_START Expression SOAKED_INDEX_END" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > IndexNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "s1" > ' soak' < / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-26" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-26" > #< / a > < / div > < p > An object literal.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nb" > Object< / span > < span class = "o" > :< / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " { AssignList }" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ObjectNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " { IndentedAssignList }" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ObjectNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-27" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-27" > #< / a > < / div > < p > A class literal.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Class: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " CLASS Value" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ClassNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " CLASS Value EXTENDS Value" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ClassNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $4< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " CLASS Value IndentedAssignList" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ClassNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " CLASS Value EXTENDS Value IndentedAssignList" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ClassNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $4< / span > < span class = "p" > ,< / span > < span class = "nx" > $5< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-28" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-28" > #< / a > < / div > < p > Assignment within an object literal (comma or newline separated).< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > AssignList: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " " < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > []< / span >
< span class = "nx" > o< / span > < span class = "s2" > " AssignObj" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > [< / span > < span class = "nx" > $1< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " AssignList , AssignObj" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > [< / span > < span class = "nx" > $3< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " AssignList TERMINATOR AssignObj" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > [< / span > < span class = "nx" > $3< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " AssignList , TERMINATOR AssignObj" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > [< / span > < span class = "nx" > $4< / span > < span class = "p" > ]< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-29" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-29" > #< / a > < / div > < p > A list of assignments in a block indentation.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > IndentedAssignList: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " INDENT AssignList OUTDENT" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $2< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-30" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-30" > #< / a > < / div > < p > All flavors of function call (instantiation, super, and regular).< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Call: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Invocation" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " NEW Invocation" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $2< / span > < span class = "p" > .< / span > < span class = "nx" > new_instance< / span > < span class = "p" > ()< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Super" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-31" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-31" > #< / a > < / div > < p > Extending an object's prototype.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Extends: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Value EXTENDS Value" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ExtendsNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-32" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-32" > #< / a > < / div > < p > A generic function invocation.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Invocation: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Value Arguments" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > CallNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Invocation Arguments" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > CallNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-33" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-33" > #< / a > < / div > < p > The list of arguments to a function invocation.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Arguments: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " CALL_START ArgList CALL_END" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $2< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-34" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-34" > #< / a > < / div > < p > Calling super.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Super: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " SUPER CALL_START ArgList CALL_END" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > CallNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' super' < / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-35" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-35" > #< / a > < / div > < p > This references, either naked or to a property.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > This: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " @" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' this' < / span > < span class = "p" > ))< / span >
< span class = "nx" > o< / span > < span class = "s2" > " @ Identifier" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ValueNode< / span > < span class = "p" > (< / span > < span class = "k" > new< / span > < span class = "nx" > LiteralNode< / span > < span class = "p" > (< / span > < span class = "s1" > ' this' < / span > < span class = "p" > ),< / span > < span class = "p" > [< / span > < span class = "k" > new< / span > < span class = "nx" > AccessorNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )])< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-36" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-36" > #< / a > < / div > < p > The range literal.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Range: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " [ Expression . . Expression ]" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > RangeNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $5< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " [ Expression . . . Expression ]" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > RangeNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $6< / span > < span class = "p" > ,< / span > < span class = "kc" > true< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-37" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-37" > #< / a > < / div > < p > The slice literal.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Slice: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " INDEX_START Expression . . Expression INDEX_END" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > RangeNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $5< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " INDEX_START Expression . . . Expression INDEX_END" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > RangeNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $6< / span > < span class = "p" > ,< / span > < span class = "kc" > true< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-38" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-38" > #< / a > < / div > < p > The array literal.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nb" > Array< / span > < span class = "o" > :< / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " [ ArgList ]" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ArrayNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-39" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-39" > #< / a > < / div > < p > A list of arguments to a method call, or as the contents of an array.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > ArgList: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " " < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > []< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > [< / span > < span class = "nx" > $1< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " INDENT Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > [< / span > < span class = "nx" > $2< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ArgList , Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > [< / span > < span class = "nx" > $3< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ArgList TERMINATOR Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > [< / span > < span class = "nx" > $3< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ArgList , TERMINATOR Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > [< / span > < span class = "nx" > $4< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ArgList , INDENT Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > [< / span > < span class = "nx" > $4< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ArgList OUTDENT" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-40" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-40" > #< / a > < / div > < p > Just simple, comma-separated, required arguments (no fancy syntax).< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > SimpleArgs: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " SimpleArgs , Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span >
< span class = "k" > if< / span > < span class = "nx" > $1< / span > < span class = "k" > instanceof< / span > < span class = "nb" > Array< / span > < span class = "k" > then< / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > concat< / span > < span class = "p" > ([< / span > < span class = "nx" > $3< / span > < span class = "p" > ])< / span > < span class = "k" > else< / span > < span class = "p" > [< / span > < span class = "nx" > $1< / span > < span class = "p" > ].< / span > < span class = "nx" > concat< / span > < span class = "p" > ([< / span > < span class = "nx" > $3< / span > < span class = "p" > ])< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-41" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-41" > #< / a > < / div > < p > Try/catch/finally exception handling blocks.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Try: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " TRY Block Catch" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > TryNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "nx" > $3< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ])< / span >
< span class = "nx" > o< / span > < span class = "s2" > " TRY Block FINALLY Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > TryNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "nx" > $4< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " TRY Block Catch FINALLY Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > TryNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "nx" > $3< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ],< / span > < span class = "nx" > $5< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-42" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-42" > #< / a > < / div > < p > A catch clause.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Catch: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " CATCH Identifier Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > [< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > ]< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-43" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-43" > #< / a > < / div > < p > Throw an exception.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Throw: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " THROW Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ThrowNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-44" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-44" > #< / a > < / div > < p > Parenthetical expressions.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Parenthetical: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ( Expression )" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ParentheticalNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-45" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-45" > #< / a > < / div > < p > The condition for a while loop.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > WhileSource: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " WHILE Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > WhileNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " WHILE Expression WHEN Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > WhileNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "nx" > filter< / span > < span class = "o" > :< / span > < span class = "nx" > $4< / span > < span class = "p" > })< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-46" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-46" > #< / a > < / div > < p > The while loop. (there is no do..while).< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > While: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " WhileSource Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > add_body< / span > < span class = "nx" > $2< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression WhileSource" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $2< / span > < span class = "p" > .< / span > < span class = "nx" > add_body< / span > < span class = "nx" > $1< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-47" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-47" > #< / a > < / div > < p > Array comprehensions, including guard and current index.
Looks a little confusing, check nodes.rb for the arguments to ForNode.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > For: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression FOR ForVariables ForSource" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ForNode< / span > < span class = "p" > (< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $4< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "nx" > $3< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ])< / span >
< span class = "nx" > o< / span > < span class = "s2" > " FOR ForVariables ForSource Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > ForNode< / span > < span class = "p" > (< / span > < span class = "nx" > $4< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > ,< / span > < span class = "nx" > $2< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "nx" > $2< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ])< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-48" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-48" > #< / a > < / div > < p > An array comprehension has variables for the current element and index.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > ForVariables: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Identifier" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > [< / span > < span class = "nx" > $1< / span > < span class = "p" > ]< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Identifier , Identifier" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > [< / span > < span class = "nx" > $1< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > ]< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-49" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-49" > #< / a > < / div > < p > The source of the array comprehension can optionally be filtered.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > ForSource: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " IN Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > {< / span > < span class = "nv" > source: < / span > < span class = "nx" > $2< / span > < span class = "p" > }< / span >
< span class = "nx" > o< / span > < span class = "s2" > " OF Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > {< / span > < span class = "nv" > source: < / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nv" > object: < / span > < span class = "kc" > true< / span > < span class = "p" > }< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ForSource WHEN Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nv" > $1.filter: < / span > < span class = "nx" > $3< / span > < span class = "p" > ;< / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ForSource BY Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nv" > $1.step: < / span > < span class = "nx" > $3< / span > < span class = "p" > ;< / span > < span class = "nx" > $1< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-50" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-50" > #< / a > < / div > < p > Switch/When blocks.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Switch: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " SWITCH Expression INDENT Whens OUTDENT" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $4< / span > < span class = "p" > .< / span > < span class = "nx" > rewrite_condition< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " SWITCH Expression INDENT Whens ELSE Block OUTDENT" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $4< / span > < span class = "p" > .< / span > < span class = "nx" > rewrite_condition< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ).< / span > < span class = "nx" > add_else< / span > < span class = "p" > (< / span > < span class = "nx" > $6< / span > < span class = "p" > ,< / span > < span class = "kc" > true< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-51" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-51" > #< / a > < / div > < p > The inner list of whens.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > Whens: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " When" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Whens When" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > push< / span > < span class = "nx" > $2< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-52" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-52" > #< / a > < / div > < p > An individual when.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > When: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " LEADING_WHEN SimpleArgs Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > IfNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > ,< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "nv" > statement: < / span > < span class = "kc" > true< / span > < span class = "p" > })< / span >
< span class = "nx" > o< / span > < span class = "s2" > " LEADING_WHEN SimpleArgs Block TERMINATOR" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > IfNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > ,< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "nv" > statement: < / span > < span class = "kc" > true< / span > < span class = "p" > })< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Comment TERMINATOR When" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nv" > $3.comment: < / span > < span class = "nx" > $1< / span > < span class = "p" > ;< / span > < span class = "nx" > $3< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-53" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-53" > #< / a > < / div > < p > The most basic form of "if".< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > IfStart: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " IF Expression Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > IfNode< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > ,< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "nx" > o< / span > < span class = "s2" > " IfStart ElsIfs" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > add_else< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span >
< span class = "nv" > IfBlock: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " IfStart" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " IfStart ELSE Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > add_else< / span > < span class = "p" > (< / span > < span class = "nx" > $3< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-54" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-54" > #< / a > < / div > < p > Multiple elsifs can be chained together.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > ElsIfs: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ELSE IF Expression Block" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "p" > (< / span > < span class = "k" > new< / span > < span class = "nx" > IfNode< / span > < span class = "p" > (< / span > < span class = "nx" > $3< / span > < span class = "p" > ,< / span > < span class = "nx" > $4< / span > < span class = "p" > )).< / span > < span class = "nx" > force_statement< / span > < span class = "p" > ()< / span >
< span class = "nx" > o< / span > < span class = "s2" > " ElsIfs ElsIf" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span > < span class = "p" > .< / span > < span class = "nx" > add_else< / span > < span class = "p" > (< / span > < span class = "nx" > $2< / span > < span class = "p" > )< / span >
< span class = "p" > ]< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-55" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-55" > #< / a > < / div > < p > The full complement of if blocks, including postfix one-liner ifs and unlesses.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > If: < / span > < span class = "p" > [< / span >
< span class = "nx" > o< / span > < span class = "s2" > " IfBlock" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "nx" > $1< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression IF Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > IfNode< / span > < span class = "p" > (< / span > < span class = "nx" > $3< / span > < span class = "p" > ,< / span > < span class = "nx" > Expressions< / span > < span class = "p" > .< / span > < span class = "nx" > wrap< / span > < span class = "p" > ([< / span > < span class = "nx" > $1< / span > < span class = "p" > ]),< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "nv" > statement: < / span > < span class = "kc" > true< / span > < span class = "p" > })< / span >
< span class = "nx" > o< / span > < span class = "s2" > " Expression UNLESS Expression" < / span > < span class = "p" > ,< / span > < span class = "o" > -> < / span > < span class = "k" > new< / span > < span class = "nx" > IfNode< / span > < span class = "p" > (< / span > < span class = "nx" > $3< / span > < span class = "p" > ,< / span > < span class = "nx" > Expressions< / span > < span class = "p" > .< / span > < span class = "nx" > wrap< / span > < span class = "p" > ([< / span > < span class = "nx" > $1< / span > < span class = "p" > ]),< / span > < span class = "kc" > null< / span > < span class = "p" > ,< / span > < span class = "p" > {< / span > < span class = "nv" > statement: < / span > < span class = "kc" > true< / span > < span class = "p" > ,< / span > < span class = "nv" > invert: < / span > < span class = "kc" > true< / span > < span class = "p" > })< / span >
< span class = "p" > ]< / span >
< span class = "p" > }< / span > < / pre > < / div > < / td > < / tr > < tr id = "section-56" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-56" > #< / a > < / div > < p > Helpers ==============================================================< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < / pre > < / div > < / td > < / tr > < tr id = "section-57" > < td class = "docs" > < div class = "octowrap" > < a class = "octothorpe" href = "#section-57" > #< / a > < / div > < p > Make the Jison parser.< / p > < / td > < td class = "code" > < div class = "highlight" > < pre > < span class = "nv" > bnf: < / span > < span class = "p" > {}< / span >
< span class = "nv" > tokens: < / span > < span class = "p" > []< / span >
< span class = "k" > for< / span > < span class = "nx" > name< / span > < span class = "p" > ,< / span > < span class = "nx" > non_terminal< / span > < span class = "k" > of< / span > < span class = "nx" > grammar< / span >
< span class = "nx" > bnf< / span > < span class = "p" > [< / span > < span class = "nx" > name< / span > < span class = "p" > ]< / span > < span class = "o" > :< / span > < span class = "k" > for< / span > < span class = "nx" > option< / span > < span class = "k" > in< / span > < span class = "nx" > non_terminal< / span >
< span class = "k" > for< / span > < span class = "nx" > part< / span > < span class = "k" > in< / span > < span class = "nx" > option< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ].< / span > < span class = "nx" > split< / span > < span class = "p" > (< / span > < span class = "s2" > " " < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "o" > !< / span > < span class = "nx" > grammar< / span > < span class = "p" > [< / span > < span class = "nx" > part< / span > < span class = "p" > ]< / span >
< span class = "nx" > tokens< / span > < span class = "p" > .< / span > < span class = "nx" > push< / span > < span class = "p" > (< / span > < span class = "nx" > part< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "nx" > name< / span > < span class = "o" > ==< / span > < span class = "s2" > " Root" < / span >
< span class = "nx" > option< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "s2" > " return ${option[1]}" < / span >
< span class = "nx" > option< / span >
< span class = "nv" > tokens: < / span > < span class = "nx" > tokens< / span > < span class = "p" > .< / span > < span class = "nx" > join< / span > < span class = "p" > (< / span > < span class = "s2" > " " < / span > < span class = "p" > )< / span >
< span class = "nv" > exports.parser: < / span > < span class = "k" > new< / span > < span class = "nx" > Parser< / span > < span class = "p" > ({< / span > < span class = "nv" > tokens: < / span > < span class = "nx" > tokens< / span > < span class = "p" > ,< / span > < span class = "nv" > bnf: < / span > < span class = "nx" > bnf< / span > < span class = "p" > ,< / span > < span class = "nv" > operators: < / span > < span class = "nx" > operators< / span > < span class = "p" > .< / span > < span class = "nx" > reverse< / span > < span class = "p" > (),< / span > < span class = "nv" > startSymbol: < / span > < span class = "s1" > ' Root' < / span > < span class = "p" > },< / span > < span class = "p" > {< / span > < span class = "nv" > debug: < / span > < span class = "kc" > false< / span > < span class = "p" > })< / span >
< / pre > < / div > < / td > < / tr > < / tbody > < / table > < / div > < / body > < / html >