diff options
Diffstat (limited to 'lib/tools/parse.nom')
| -rwxr-xr-x | lib/tools/parse.nom | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/tools/parse.nom b/lib/tools/parse.nom new file mode 100755 index 0000000..63cc247 --- /dev/null +++ b/lib/tools/parse.nom @@ -0,0 +1,47 @@ +#!/usr/bin/env nomsu -V6.14 +# + Tool to print out a parse tree of files in an easy-to-read format. Usage: + nomsu tools/parse.nom file1 file2 directory1 ... + +use "filesystem" +use "commandline" + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +externally (print tree $t at indent $indent) means: + if $t.type is: + "Action": + say "\($indent)Action (\($t.stub)):" + for $arg in $t: + if ($arg is syntax tree): + print tree $arg at indent "\$indent " + + "MethodCall": + say "\($indent)MethodCall on:" + print tree $t.1 at indent "\$indent " + print tree $t.2 at indent "\$indent " + + "Number": + say "\$indent\($t.1)" + + "Var": + say "\($indent)$\($t.1)" + + else: + say "\$indent\($t.type):" + for $arg in $t: + when: + ($arg is syntax tree): + print tree $arg at indent "\$indent " + + else: + say "\$indent \(quote $arg)" + +command line program with $args: + for $filename in $args.extras: + $file = (read file $filename) + unless $file: + fail "File does not exist: \$filename" + $nomsu = (NomsuCode from (Source $filename 1 (size of $file)) $file) + $tree = ($nomsu parsed) + print tree $tree at indent "" |
