import parser
import parser_util
-
-class PrintTreeVisitor
- super Visitor
- private var rank: Int
- redef fun visit(n)
- do
- if n isa Token then
- printn(" " * rank, n.class_name, " \"", n.text.escape_to_c, "\" ", n.location, "\n")
- else
- printn(" " * rank, n.class_name, " ", n.location, "\n")
- end
- rank = rank + 1
- n.visit_all(self)
- rank = rank - 1
- end
-
- init
- do
- rank = 0
- end
-end
+import astutil
var no_print = false
var only_lexer = false
var need_help = false
var no_file = false
var interactive = false
+var xml = false
while not args.is_empty and args.first.chars.first == '-' do
if args.first == "-n" then
only_lexer = true
else if args.first == "-p" then
only_lexer = false
+ else if args.first == "-x" then
+ xml = true
else if args.first == "-e" then
no_file = true
else if args.first == "-i" then
print(" -n do not print anything")
print(" -l only lexer")
print(" -p lexer and parser (default)")
+ print(" -x instead of a ascii tree, output a XML document")
print(" -e instead on files, each argument is a content to parse")
print(" -i tree to parse are read interactively")
print(" -h print this help")
else if interactive then
if only_lexer then
- print "Error: -l and -i are incompatibles"
+ print "Error: -l and -i are incompatible"
exit 1
else if no_file then
- print "Error: -e and -i are incompatibles"
+ print "Error: -e and -i are incompatible"
exit 1
else if not args.is_empty then
print "Error: -i works without arguments"
end
if not no_print then
- (new PrintTreeVisitor).enter_visit(n)
+ n.dump_tree
end
end
else
if no_file then
source = new SourceFile.from_string("", a)
else
- var f = new IFStream.open(a)
+ var f = new FileReader.open(a)
source = new SourceFile(a, f)
f.close
end
return
end
- if not no_print then
- (new PrintTreeVisitor).enter_visit(tree)
+ if xml then
+ tree.parentize_tokens
+ tree.to_xml.write_to(stdout)
+ else if not no_print then
+ tree.dump_tree
end
end
end