Stefan Matthias Aust <sma / 3plus4.de> wrote:

>I'm afraid, the only complete reference for Ruby's grammar is the YACC
>input file "parse.y" from the ruby source distribution.  One Ruby
>overview document contains a simplified BNF but that's probably not
>enough to create a correct Ruby parser.

Bad style, I know...  but this tiny ugly script can extract the BNF
rules from parse.y with all C code stripped.

#!/usr/local/bin/ruby -w
while gets
  break if /^%%/
end
i = 0; j = true
while gets
  break if /^%%/
  $_.each_byte do |c|
    if i == 0 && c == ?' then j = !j end
    i += 1 if j && c == ?{
    print c.chr if i == 0
    i -= 1 if j && c == ?}
    raise "oops" if i < 0
  end
end

Perhaps it's useful.  If the script is called eg, then

./eg parse.y|ruby -n -e 'next if /^\s*$/; print'|less

shows just the grammar rules.

bye
-- 
Stefan Matthias Aust \/ Truth Until Paradox