nitcc_runtime :: TestParser :: main
Use the class as the main enrty point of the programnitcc_runtime :: TestParser :: name
The name of the language (used for generated files)nitcc_runtime :: TestParser :: new_lexer
How to get a new lexer on a given stream of characternitcc_runtime :: TestParser :: work
Produce a full syntactic tree for a given stream of characternitcc_runtime $ TestParser :: SELF
Type of this instance, automatically specialized in every classcore :: Object :: class_factory
Implementation used byget_class
to create the specific class.
core :: Object :: defaultinit
core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
nitcc_runtime :: TestParser :: main
Use the class as the main enrty point of the programnitcc_runtime :: TestParser :: name
The name of the language (used for generated files)nitcc_runtime :: TestParser :: new_lexer
How to get a new lexer on a given stream of charactercore :: Object :: output_class_name
Display class name on stdout (debug only).nitcc_runtime :: TestParser :: work
Produce a full syntactic tree for a given stream of character
# All-in-one abstract class to test generated parsers on a given
abstract class TestParser
# How to get a new lexer on a given stream of character
fun new_lexer(text: String): Lexer is abstract
# How to get a new parser
fun new_parser: Parser is abstract
# The name of the language (used for generated files)
fun name: String is abstract
# Use the class as the main enrty point of the program
# - parse arguments and options of the command
# - test the parser (see `work`)
fun main: Node
do
if args.is_empty then
print "usage {name}_test <filepath> | - | -e <text>"
exit 0
end
var filepath = args.shift
var text
if filepath == "-" then
text = sys.stdin.read_all
else if filepath == "-e" then
if args.is_empty then
print "Error: -e need a text"
exit 1
end
text = args.shift
else
var f = new FileReader.open(filepath)
text = f.read_all
f.close
end
if not args.is_empty then
print "Error: superfluous arguments."
exit 1
end
return work(text)
end
# Produce a full syntactic tree for a given stream of character
# Produce also statistics and output files
fun work(text: String): Node
do
print "INPUT: {text.length} chars"
var l = new_lexer(text)
var tokens = l.lex
var tokout = "{name}.tokens.out"
print "TOKEN: {tokens.length} tokens (see {tokout})"
var f = new FileWriter.open(tokout)
for t in tokens do
f.write "{t.to_s}\n"
end
f.close
var p = new_parser
p.tokens.add_all(tokens)
var n = p.parse
var astout = "{name}.ast.out"
f = new FileWriter.open(astout)
var tpv = new TreePrinterVisitor(f)
var astdotout = "{name}.ast.dot"
if n isa NError then
print "Syntax error: {n.message}"
print "ERROR: {n} (see {astout} and {astdotout})"
tpv.enter_visit(n)
n = n.error_tree
else
print "ROOT: {n}; {n.depth.length} nodes (see {astout} and {astdotout})"
end
tpv.enter_visit(n)
n.to_dot(astdotout)
f.close
return n
end
end
lib/nitcc_runtime/nitcc_runtime.nit:587,1--672,3