blob: ca898ddc188e40083ae046de4b21c9c4db4cafb7 [file] [log] [blame]
#!/usr/bin/ruby
# encoding: utf-8
require 'antlr3/test/functional'
class TestParameters < ANTLR3::Test::Functional
inline_grammar( <<-'END' )
grammar Parameters;
options {
language = Ruby;
}
@parser::members {
def emit_error_message(msg)
# do nothing
end
def report_error(error)
raise error
end
}
@lexer::members {
def emit_error_message(msg)
# do nothing
end
def report_error(error)
raise error
end
}
a[arg1, arg2] returns [l]
: A+ EOF
{
l = [$arg1, $arg2]
$arg1 = "gnarz"
}
;
A: 'a'..'z';
WS: ' '+ { $channel = HIDDEN };
END
example "rules with method parameters" do
lexer = Parameters::Lexer.new( 'a a a' )
parser = Parameters::Parser.new lexer
r = parser.a( 'foo', 'bar' )
r.should == %w(foo bar)
end
end
class TestMultipleReturnValues < ANTLR3::Test::Functional
inline_grammar( <<-'END' )
grammar MultipleReturnValues;
options { language = Ruby; }
@parser::members {
def emit_error_message(msg)
# do nothing
end
def report_error(error)
raise error
end
}
@lexer::members {
def emit_error_message(msg)
# do nothing
end
def report_error(error)
raise error
end
}
a returns [foo, bar]: A
{
$foo = "foo";
$bar = "bar";
}
;
A: 'a'..'z';
WS :
( ' '
| '\t'
| ( '\n'
| '\r\n'
| '\r'
)
)+
{ $channel = HIDDEN }
;
END
example "multi-valued rule return structures" do
lexer = MultipleReturnValues::Lexer.new( ' a' )
parser = MultipleReturnValues::Parser.new lexer
ret = parser.a
ret.foo.should == 'foo'
ret.bar.should == 'bar'
end
end
class TestRuleVisibility < ANTLR3::Test::Functional
inline_grammar( <<-'END' )
grammar RuleVisibility;
options { language=Ruby; }
public a: ID;
private b: DIGIT;
protected c: ID DIGIT;
DIGIT: ('0'..'9')+;
ID: ('a'..'z' | 'A'..'Z')+;
WS: (' ' | '\t' | '\n' | '\r' | '\f')+ { $channel=HIDDEN; };
END
example 'using visibility modifiers on rules' do
mname = RUBY_VERSION =~ /^1\.9/ ? proc { | n | n.to_sym } : proc { | n | n.to_s }
RuleVisibility::Parser.public_instance_methods.should include( mname[ 'a' ] )
RuleVisibility::Parser.protected_instance_methods.should include( mname[ 'c' ] )
RuleVisibility::Parser.private_instance_methods.should include( mname[ 'b' ] )
end
end