mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
73 lines
1.3 KiB
Text
73 lines
1.3 KiB
Text
|
class P
|
||
|
|
||
|
rule
|
||
|
|
||
|
a: A
|
||
|
{
|
||
|
# comment test
|
||
|
|
||
|
# comment test
|
||
|
|
||
|
# string
|
||
|
@sstring = 'squote string'
|
||
|
@dstring = 'dquote string'
|
||
|
|
||
|
# regexp
|
||
|
@regexp = /some regexp with spaces/
|
||
|
|
||
|
# gvar
|
||
|
/regexp/ === 'some regexp matches to this string'
|
||
|
@pre_match = $`
|
||
|
@matched = $&
|
||
|
@post_match = $'
|
||
|
@m = $~
|
||
|
|
||
|
# braces
|
||
|
@array = []
|
||
|
[1,2,3].each {|i|
|
||
|
@array.push i
|
||
|
}
|
||
|
3.times { @array.push 10 }
|
||
|
}
|
||
|
|
||
|
end
|
||
|
|
||
|
---- inner
|
||
|
|
||
|
def parse
|
||
|
@sstring = @dstring = nil
|
||
|
@regexp = nil
|
||
|
@pre_match = @matched = @post_match = @m = nil
|
||
|
|
||
|
@src = [[:A, 'A'], [false, '$']]
|
||
|
do_parse
|
||
|
|
||
|
assert_equal 'squote string', @sstring
|
||
|
assert_equal 'dquote string', @dstring
|
||
|
assert_equal(/some regexp with spaces/, @regexp)
|
||
|
assert_equal 'some ', @pre_match
|
||
|
assert_equal 'regexp', @matched
|
||
|
assert_equal ' matches to this string', @post_match
|
||
|
assert_instance_of MatchData, @m
|
||
|
end
|
||
|
|
||
|
def assert_equal(ok, data)
|
||
|
unless ok == data
|
||
|
raise "expected <#{ok.inspect}> but is <#{data.inspect}>"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def assert_instance_of(klass, obj)
|
||
|
unless obj.instance_of?(klass)
|
||
|
raise "expected #{klass} but is #{obj.class}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def next_token
|
||
|
@src.shift
|
||
|
end
|
||
|
|
||
|
---- footer
|
||
|
|
||
|
P.new.parse
|