All-in-one abstract class to test generated parsers on a given

Introduced properties

fun main: Node

nitcc_runtime :: TestParser :: main

Use the class as the main enrty point of the program
abstract fun name: String

nitcc_runtime :: TestParser :: name

The name of the language (used for generated files)
abstract fun new_lexer(text: String): Lexer

nitcc_runtime :: TestParser :: new_lexer

How to get a new lexer on a given stream of character
abstract fun new_parser: Parser

nitcc_runtime :: TestParser :: new_parser

How to get a new parser
fun work(text: String): Node

nitcc_runtime :: TestParser :: work

Produce a full syntactic tree for a given stream of character

Redefined properties

redef type SELF: TestParser

nitcc_runtime $ TestParser :: SELF

Type of this instance, automatically specialized in every class

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
fun main: Node

nitcc_runtime :: TestParser :: main

Use the class as the main enrty point of the program
abstract fun name: String

nitcc_runtime :: TestParser :: name

The name of the language (used for generated files)
abstract fun new_lexer(text: String): Lexer

nitcc_runtime :: TestParser :: new_lexer

How to get a new lexer on a given stream of character
abstract fun new_parser: Parser

nitcc_runtime :: TestParser :: new_parser

How to get a new parser
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun work(text: String): Node

nitcc_runtime :: TestParser :: work

Produce a full syntactic tree for a given stream of character
package_diagram nitcc_runtime::TestParser TestParser core::Object Object nitcc_runtime::TestParser->core::Object

Parents

interface Object

core :: Object

The root of the class hierarchy.

Class definitions

nitcc_runtime $ TestParser
# 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