以下に疑似BNFによるRubyの文法を示します.より詳しくは parse.y を参照してください.
PROGRAM : COMPEXPR COMPEXPR : EXPR (TERM EXPR)* [TERM] EXPR : MLHS `=' MRHS | return CALL_ARGS | yield CALL_ARGS | undef FNAME | alias FNAME FNAME | EXPR if EXPR | EXPR while EXPR | EXPR unless EXPR | EXPR until EXPR | EXPR and EXPR | EXPR or EXPR | ASSOCS | ITERATOR do [`|' [ITER_VAR] `|'] COMPEXPR end | COMMAND | `!' COMMAND | ARG ITERATOR : FUNCTION | COMMAND COMMAND : identifier CALL_ARGS | PRIMARY `.' identifier CALL_ARGS | super CALL_ARGS FUNCTION : OPERATION [`(' [CALL_ARGS] `)'] | PRIMARY `.' OPERATION `(' [CALL_ARGS] `)' | PRIMARY `.' OPERATION ARG : LHS `=' ARG | LHS OP_ASGN ARG | ARG `..' ARG | ARG `...' ARG | ARG `+' ARG | ARG `-' ARG | ARG `*' ARG | ARG `/' ARG | ARG `%' ARG | ARG `**' ARG | `+' ARG | `-' ARG | ARG `|' ARG | ARG `^' ARG | ARG `&' ARG | ARG `<=>' ARG | ARG `>' ARG | ARG `>=' ARG | ARG `<' ARG | ARG `<=' ARG | ARG `==' ARG | ARG `===' ARG | ARG `!=' ARG | ARG `=~' ARG | ARG `!~' ARG | `!' ARG | `~' ARG | ARG `<<' ARG | ARG `>>' ARG | ARG `&&' ARG | ARG `||' ARG | defined? ARG | PRIMARY PRIMARY : `(' COMPEXPR `)' | LITERAL | VARIABLE | PRIMARY `::' identifier | super `(' [CALL_ARGS] `)' | super | PRIMARY `[' [ARGS] `]' | `[' [ARGS [`,']] `]' | `{' [(ARGS|ASSOCS) [`,']] `}' | return [`(' [CALL_ARGS] `)'] | yield [`(' [CALL_ARGS] `)'] | defined? `(' ARG `)' | FUNCTION | FUNCTION `{' [`|' [ITER_VAR] `|'] COMPEXPR `}' | if EXPR THEN COMPEXPR (elsif EXPR THEN COMPEXPR)* [else COMPEXPR] end | unless EXPR THEN COMPEXPR [else COMPEXPR] end | while EXPR TERM COMPEXPR end | until EXPR TERM COMPEXPR end | case COMPEXPR (when ARGS THEN COMPEXPR)+ [else COMPEXPR] end | for ITER_VAR in EXPR TERM COMPEXPR end | begin COMPEXPR [rescue [ARGS] TERM COMPEXPR]+ [ensure COMPEXPR] end | class identifier `:' identifier COMPEXPR end | module identifier COMPEXPR end | def FNAME ARGLIST COMPEXPR end | def SINGLETON `.' FNAME ARGLIST COMPEXPR end THEN : TERM | then | TERM then ITER_VAR : LHS | MLHS MLHS : LHS `,' [LHS (`,' LHS)*] [`*' LHS] | `*' LHS LHS : VARIABLE | PRIMARY `[' [ARGS] `]' | PRIMARY `.' identifier MRHS : ARGS [`,' `*' ARG] | `*' ARG CALL_ARGS : ARGS | ASSOCS | COMMAND | ARGS [`,' ASSOCS] [`,' `*' ARG] | `*' ARG ARGS : ARG (`,' ARG)* ARGLIST : `('[identifier(`,'identifier)*][`*'identifier]`)' | TERM SINGLETON : VARIABLE | `(' EXPR `)' ASSOCS : ASSOC (`,' ASSOC)* ASSOC : ARG `=>' ARG VARIABLE : VARNAME | nil | self LITERAL : numeric | SYMBOL | STRING | REGEXP TERM : `;' | `\n'
以下のものは字句解析機で解釈されます.
SYMBOL : `:'FNAME | `:'VARNAME FNAME : identifier | `..' | `|' | `^' | `&' | `<=>' | `==' | `===' | `=~' | `>' | `>=' | `<' | `<=' | `+' | `-' | `*' | `/' | `%' | `**' | `<<' | `>>' | `~' | `+@' | `-@' | `[]' | `[]=' OPERATION : identifier | identifier'!' | identifier'?' VARNAME : GLOBAL | `@'identifier | identifier GLOBAL : `$'identifier | `$'any_char STRING : `"' any_char* `"' | `" any_char* `" | "' any_char* "' REGEXP : `/' any_char* `/'[`i'|`o']