summaryrefslogtreecommitdiff
path: root/sample/exyacc.rb
diff options
context:
space:
mode:
Diffstat (limited to 'sample/exyacc.rb')
-rw-r--r--sample/exyacc.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/sample/exyacc.rb b/sample/exyacc.rb
new file mode 100644
index 0000000..ad6191c
--- /dev/null
+++ b/sample/exyacc.rb
@@ -0,0 +1,22 @@
+#! /usr/local/bin/ruby -Cn
+# usage: exyacc.rb [yaccfiles]
+# this is coverted from exyacc.pl in the camel book
+
+$/ = nil
+
+while gets()
+ sbeg = $_.index("\n%%") + 1
+ send = $_.rindex("\n%%") + 1
+ $_ = $_[sbeg, send-sbeg]
+ sub(/.*\n/, "")
+ gsub(/'{'/, "'\001'")
+ gsub(/'}'/, "'\002'")
+ gsub('\*/', "\003\003")
+ gsub("/\\*[^\003]*\003\003", '')
+ while gsub(/{[^}{]*}/, ''); end
+ gsub(/'\001'/, "'{'")
+ gsub(/'\002'/, "'}'")
+ while gsub(/^[ \t]*\n(\s)/, '\1'); end
+ gsub(/([:|])[ \t\n]+(\w)/, '\1 \2')
+ print $_
+end