Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
sql-bubble.rb emits parsable ruby
  • Loading branch information
steveyen committed Apr 16, 2011
1 parent c8e2270 commit cf35d7f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 17 deletions.
39 changes: 23 additions & 16 deletions sql-bubble.rb
@@ -1,18 +1,19 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby


# Process the sql-bubble.txt into a sql.pegjs # Process the sql-bubble.txt into a ruby rules.
# #
bubble = ARGV[0] || 'sql-bubble.txt' bubble = ARGV[0] || 'sql-bubble.txt'


lines = File.open(bubble, "r").readlines lines = File.open(bubble, "r").readlines
lines = lines.reject {|x| x.match(/^\s*\#/)} # Comments. lines = lines.reject {|x| x.match(/^\s*\#/)} # Comments.
lines = lines.reject {|x| x.match(/^\s*$/)} # Whitespace. lines = lines.reject {|x| x.match(/^\s*$/)} # Whitespace.
lines = lines.map {|x| x.gsub(/^set all_graphs/, 'root')} lines = lines.map {|x| x.gsub(/^set all_graphs \{/, '')}
lines = lines.map {|x| x.gsub(/^\}/, 'nil')}
lines = lines.map {|x| x.gsub(/\{\}/, 'nil')} lines = lines.map {|x| x.gsub(/\{\}/, 'nil')}
lines = lines.map {|x| x.gsub(/\./, 'dot')} lines = lines.map {|x| x.gsub(/\./, 'dot')}
lines = lines.map {|x| x.gsub(/\=/, 'equal')} lines = lines.map {|x| x.gsub(/\=/, 'equal')}
lines = lines.map {|x| x.gsub(/\-\-/, 'minusminus')} lines = lines.map {|x| x.gsub(/\-\-/, 'minusminus')}
lines = lines.map {|x| x.gsub(/ \- /, ' minus ')} lines = lines.map {|x| x.gsub(/ \-/, ' minus')}
lines = lines.map {|x| x.gsub(/\+/, 'plus')} lines = lines.map {|x| x.gsub(/\+/, 'plus')}
lines = lines.map {|x| x.gsub(/\-/, '_')} lines = lines.map {|x| x.gsub(/\-/, '_')}
lines = lines.map {|x| x.gsub(/,/, 'comma')} lines = lines.map {|x| x.gsub(/,/, 'comma')}
Expand All @@ -25,26 +26,32 @@
lines = lines.map {|x| x.gsub(/\{/, '(')} lines = lines.map {|x| x.gsub(/\{/, '(')}
lines = lines.map {|x| x.gsub(/\}/, ')')} lines = lines.map {|x| x.gsub(/\}/, ')')}
lines = lines.map {|x| x.gsub(/\//, '')} lines = lines.map {|x| x.gsub(/\//, '')}
lines = lines.map {|x| x.gsub(/([A-Z][A-Z_]+)/, '"\\1"')} lines = lines.map {|x| x.gsub(/([A-Z][A-Z_]*)/, '"\\1"')}
lines = lines.map {|x| x.gsub(/^ ([a-z_]+)/, ' rule("\\1"')} lines = lines.map {|x| x.gsub(/([a-z][a-z_]+)/, ':\\1')}
lines = lines.map {|x| x.gsub(/^ \)/, ' ))')} lines = lines.map {|x| x.gsub(/^ \)/, ' ))')}


c = lines.join("") c = lines.join("")


if true if true
c = c.gsub(/\(\s*toploop ?/, "toploop(") c = c.gsub(/\(\s*:toploop ?/, "toploop( ")
c = c.gsub(/\(\s*tailbranch ?/, "tailbranch(") c = c.gsub(/\(\s*:tailbranch ?/, "tailbranch( ")
c = c.gsub(/\(\s*opt(x?) ?/, "opt\\1( ") c = c.gsub(/\(\s*:opt(x?) ?/, "opt\\1( ")
c = c.gsub(/\(\s*or ?/, "or( ") c = c.gsub(/\(\s*:or ?/, "either( ")
c = c.gsub(/\(\s*and ?/, "and( ") c = c.gsub(/\(\s*:line ?/, "line( ")
c = c.gsub(/\(\s*line ?/, "line( ") c = c.gsub(/\(\s*:loop ?/, "loop( ")
c = c.gsub(/\(\s*loop ?/, "loop( ") c = c.gsub(/\(\s*:stack ?/, "stack( ")
c = c.gsub(/\(\s*stack ?/, "stack(") c = c.gsub(/\"(\s+)/, "\",\\1")
c = c.gsub(/\" /, "\", ") c = c.gsub(/([a-z])(\s+)/, "\\1,\\2")
c = c.gsub(/([a-z]) /, "\\1, ")
c = c.gsub(/\)/, "),\\1") c = c.gsub(/\)/, "),\\1")
c = c.gsub(/,(\s*)\)/, "\\1)") c = c.gsub(/,(\s*)\)/, "\\1)")
c = c.gsub(/ \)\),/, " ))")
c = c.gsub(/, \(:nil,/, ", line(:nil,")
end end


print c lines = c.split("\n")
lines = lines.map {|x| x.gsub(/^ ([a-z_:]+)/, ' rule( \\1')}

print "# generated by './sql-bubble.rb #{bubble}'\n"
print lines[0..-2].join("\n")
print "\n"


2 changes: 1 addition & 1 deletion sql-bubble.txt
Expand Up @@ -91,7 +91,7 @@ set all_graphs {
{line CREATE {or {} TEMP TEMPORARY} TABLE {opt IF NOT EXISTS}} {line CREATE {or {} TEMP TEMPORARY} TABLE {opt IF NOT EXISTS}}
{line {optx /database-name .} /table-name {line {optx /database-name .} /table-name
{tailbranch {tailbranch
{line ( {loop column-def ,} {loop {} {, table-constraint}} )} {line ( {loop column-def ,} {loop {} {line , table-constraint}} )}
{line AS select-stmt} {line AS select-stmt}
} }
} }
Expand Down

0 comments on commit cf35d7f

Please sign in to comment.