aboutsummaryrefslogtreecommitdiff
path: root/lib/tools/parse.nom
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tools/parse.nom')
-rwxr-xr-xlib/tools/parse.nom47
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 ""