class ANTLR3::Main::ParserMain
A class which implements a handy test script which is executed whenever an ANTLR generated parser file is run directly from the command line.
Attributes
lexer_class[RW]
lexer_class_name[RW]
log[RW]
parser_class[RW]
parser_rule[RW]
port[RW]
Public Class Methods
new( parser_class, options = {} )
click to toggle source
Calls superclass method
ANTLR3::Main::Main::new
# File lib/antlr3/main.rb, line 368 def initialize( parser_class, options = {} ) super( options ) @lexer_class_name = options[ :lexer_class_name ] @lexer_class = options[ :lexer_class ] @parser_class = parser_class @parser_rule = options[ :parser_rule ] if @debug = ( @parser_class.debug? rescue false ) @trace = options.fetch( :trace, nil ) @port = options.fetch( :port, ANTLR3::Debug::DEFAULT_PORT ) @log = options.fetch( :log, @error ) end @profile = ( @parser_class.profile? rescue false ) end
Public Instance Methods
present( return_value )
click to toggle source
# File lib/antlr3/main.rb, line 457 def present( return_value ) ASTBuilder > @parser_class and return_value = return_value.tree if return_value text = begin require 'pp' return_value.pretty_inspect rescue LoadError, NoMethodError return_value.inspect end puts( text ) end end
recognize( in_stream )
click to toggle source
# File lib/antlr3/main.rb, line 440 def recognize( in_stream ) parser_options = {} if @debug if @trace parser_options[ :debug_listener ] = ANTLR3::Debug::RuleTracer.new else parser_options[ :port ] = @port parser_options[ :log ] = @log end end lexer = @lexer_class.new( in_stream ) # token_stream = CommonTokenStream.new( lexer ) parser = @parser_class.new( lexer, parser_options ) result = parser.send( @parser_rule ) and present( result ) @profile and puts( parser.profile.generate_report ) end
setup()
click to toggle source
# File lib/antlr3/main.rb, line 422 def setup unless @lexer_class ||= fetch_class( @lexer_class_name ) if @lexer_class_name fail( "unable to locate the lexer class ``#@lexer_class_name''" ) else unless @lexer_class = @parser_class.associated_lexer fail( doc( <<-END ) ) | no lexer class has been specified with the --lexer-name option | and #@parser_class does not appear to have an associated | lexer class END end end end @parser_rule ||= @parser_class.default_rule or fail( "a parser rule name must be specified via --rule NAME" ) end
setup_options( opt )
click to toggle source
Calls superclass method
ANTLR3::Main::Options#setup_options
# File lib/antlr3/main.rb, line 382 def setup_options( opt ) super opt.separator "" opt.separator( "Parser Configuration:" ) opt.on( '--lexer-name CLASS_NAME', "name of the lexer class to use" ) { |val| @lexer_class_name = val @lexer_class = nil } opt.on( '--lexer-file PATH_TO_LIBRARY', "path to library defining the lexer class" ) { |val| begin test( ?f, val ) ? load( val ) : require( val ) rescue LoadError warn( "unable to load the library specified by --lexer-file: #{ $! }" ) end } opt.on( '--rule NAME', "name of the parser rule to execute" ) { |val| @parser_rule = val } if @debug opt.separator '' opt.separator "Debug Mode Options:" opt.on( '--trace', '-t', "print rule trace instead of opening a debug socket" ) do @trace = true end opt.on( '--port NUMBER', Integer, "port number to use for the debug socket" ) do |number| @port = number end opt.on( '--log PATH', "path of file to use to record socket activity", "(stderr by default)" ) do |path| @log = open( path, 'w' ) end end end