From c1c32688a4afc43f6addb99b8b5fa878944a70e3 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Mon, 14 Jan 2019 15:42:48 -0800 Subject: Overhaul in progress, mostly working. Moved all the nomsu packages into lib/, including core/*. Changes to how nomsu environments and importing work. --- lib/tools/parse.nom | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 lib/tools/parse.nom (limited to 'lib/tools/parse.nom') 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 "" -- cgit v1.2.3