summaryrefslogtreecommitdiff
path: root/ext/ripper/tools
diff options
context:
space:
mode:
authorydah <t.yudai92@gmail.com>2024-04-27 21:16:38 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2024-04-29 08:38:23 +0900
commitf9cf923af2c54345b1d6756e3268b509655754a3 (patch)
tree6823bd71243a6031536f14920b93361df2e63752 /ext/ripper/tools
parent29aaf4abe61e5ce24577eb3e8ccaa0a21934bb30 (diff)
Use user defined parameterizing rules
Diffstat (limited to 'ext/ripper/tools')
-rw-r--r--ext/ripper/tools/preproc.rb11
1 files changed, 8 insertions, 3 deletions
diff --git a/ext/ripper/tools/preproc.rb b/ext/ripper/tools/preproc.rb
index a54302fb91..25cd46e1be 100644
--- a/ext/ripper/tools/preproc.rb
+++ b/ext/ripper/tools/preproc.rb
@@ -51,6 +51,10 @@ def process(f, out, path, template)
usercode f, out, path, template
end
+require_relative 'dsl'
+
+RIPPER_CODE_PATTERN = %r</\*% *ripper(?:\[(.*?)\])?: *(.*?) *%\*/>
+
def prelude(f, out)
@exprs = {}
while line = f.gets
@@ -58,6 +62,9 @@ def prelude(f, out)
when /\A%%/
out << "%%\n"
return
+ when RIPPER_CODE_PATTERN # %rule actions may contain /*% ripper: ... %*/ DSL
+ out << DSL.new($2, ($1 || "").split(",")).generate << "\n"
+ next
else
if (/^enum lex_state_(?:bits|e) \{/ =~ line)..(/^\}/ =~ line)
case line
@@ -74,12 +81,10 @@ def prelude(f, out)
end
end
-require_relative "dsl"
-
def grammar(f, out)
while line = f.gets
case line
- when %r</\*% *ripper(?:\[(.*?)\])?: *(.*?) *%\*/>
+ when RIPPER_CODE_PATTERN
out << DSL.new($2, ($1 || "").split(",")).generate << "\n"
when %r</\*%%%\*/>
out << "#if 0\n"