Compiler/Simple file inclusion pre processor: Difference between revisions
Content added Content deleted
(More notes) |
(J) |
||
Line 531: | Line 531: | ||
} # includeFile</lang> |
} # includeFile</lang> |
||
=={{header|J}}== |
|||
Preprocessing is a task which, if used at all, would more likely be tackled in J through monkey-patching (wrapping library definitions for names, overriding their prior definition). |
|||
Instead, here, we handle literal statements of the form <code>load'script references'</code> where 'load' appears at the beginning of the line (not indented) and 'script references' is a literal string, and nothing else appears on the line, and replace those lines with the content of the referenced script(s). |
|||
This approach is not recursive (and while it seems to offer little advantage over the native implementation of 'load', it does support 'load' inside multi-line string constants, as long as the reference(s) to the content being loaded would be supportable as a J script reference). |
|||
<lang J>preproc=: {{ |
|||
lines=. <;.2 LF,~CR-.~fread y |
|||
for_ndx. |.I.'load'-:"1 (4&{.@>) lines do. |
|||
line=. ndx{::lines |
|||
try. parse=. ;:line catch. continue. end. |
|||
if. 3~:#parse do. continue. end. |
|||
if. (<'load')~:{.parse do. continue. end. |
|||
if. ''''~:(1;0){::parse do. continue. end. |
|||
lines=. lines ndx}~ <;fread each getscripts_j_ ".1{::parse |
|||
end. |
|||
0!:0;lines |
|||
}}</lang> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |