Racc_Runtime_Core_Version_C = (defined in extention)
# File lib/racc/parser.rb, line 106 106: def _racc_do_parse_rb(arg, in_debug) 107: action_table, action_check, action_default, action_pointer, 108: goto_table, goto_check, goto_default, goto_pointer, 109: nt_base, reduce_table, token_table, shift_n, 110: reduce_n, use_result, * = arg 111: 112: _racc_init_sysvars 113: tok = act = i = nil 114: nerr = 0 115: 116: catch(:racc_end_parse) { 117: while true 118: if i = action_pointer[@racc_state[1]] 119: if @racc_read_next 120: if @racc_t != 0 # not EOF 121: tok, @racc_val = next_token() 122: unless tok # EOF 123: @racc_t = 0 124: else 125: @racc_t = (token_table[tok] or 1) # error token 126: end 127: racc_read_token(@racc_t, tok, @racc_val) if @yydebug 128: @racc_read_next = false 129: end 130: end 131: i += @racc_t 132: unless i >= 0 and 133: act = action_table[i] and 134: action_check[i] == @racc_state[1] 135: act = action_default[@racc_state[1]] 136: end 137: else 138: act = action_default[@racc_state[1]] 139: end 140: while act = _racc_evalact(act, arg) 141: ; 142: end 143: end 144: } 145: end
# File lib/racc/parser.rb, line 305 305: def _racc_do_reduce(arg, act) 306: action_table, action_check, action_default, action_pointer, 307: goto_table, goto_check, goto_default, goto_pointer, 308: nt_base, reduce_table, token_table, shift_n, 309: reduce_n, use_result, * = arg 310: state = @racc_state 311: vstack = @racc_vstack 312: tstack = @racc_tstack 313: 314: i = act * 3 315: len = reduce_table[i] 316: reduce_to = reduce_table[i+1] 317: method_id = reduce_table[i+2] 318: void_array = [] 319: 320: tmp_t = tstack[-len, len] if @yydebug 321: tmp_v = vstack[-len, len] 322: tstack[-len, len] = void_array if @yydebug 323: vstack[-len, len] = void_array 324: state[-len, len] = void_array 325: 326: # tstack must be updated AFTER method call 327: if use_result 328: vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0]) 329: else 330: vstack.push __send__(method_id, tmp_v, vstack) 331: end 332: tstack.push reduce_to 333: 334: racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug 335: 336: k1 = reduce_to - nt_base 337: if i = goto_pointer[k1] 338: i += state[1] 339: if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1 340: return curstate 341: end 342: end 343: goto_default[k1] 344: end
common
# File lib/racc/parser.rb, line 210 210: def _racc_evalact(act, arg) 211: action_table, action_check, action_default, action_pointer, 212: goto_table, goto_check, goto_default, goto_pointer, 213: nt_base, reduce_table, token_table, shift_n, 214: reduce_n, use_result, * = arg 215: nerr = 0 # tmp 216: 217: if act > 0 and act < shift_n 218: # 219: # shift 220: # 221: if @racc_error_status > 0 222: @racc_error_status -= 1 unless @racc_t == 1 # error token 223: end 224: @racc_vstack.push @racc_val 225: @racc_state.push act 226: @racc_read_next = true 227: if @yydebug 228: @racc_tstack.push @racc_t 229: racc_shift @racc_t, @racc_tstack, @racc_vstack 230: end 231: 232: elsif act < 0 and act > -reduce_n 233: # 234: # reduce 235: # 236: code = catch(:racc_jump) { 237: @racc_state.push _racc_do_reduce(arg, act) 238: false 239: } 240: if code 241: case code 242: when 1 # yyerror 243: @racc_user_yyerror = true # user_yyerror 244: return -reduce_n 245: when 2 # yyaccept 246: return shift_n 247: else 248: raise '[Racc Bug] unknown jump code' 249: end 250: end 251: 252: elsif act == shift_n 253: # 254: # accept 255: # 256: racc_accept if @yydebug 257: throw :racc_end_parse, @racc_vstack[0] 258: 259: elsif act == -reduce_n 260: # 261: # error 262: # 263: case @racc_error_status 264: when 0 265: unless arg[21] # user_yyerror 266: nerr += 1 267: on_error @racc_t, @racc_val, @racc_vstack 268: end 269: when 3 270: if @racc_t == 0 # is $ 271: throw :racc_end_parse, nil 272: end 273: @racc_read_next = true 274: end 275: @racc_user_yyerror = false 276: @racc_error_status = 3 277: while true 278: if i = action_pointer[@racc_state[1]] 279: i += 1 # error token 280: if i >= 0 and 281: (act = action_table[i]) and 282: action_check[i] == @racc_state[1] 283: break 284: end 285: end 286: throw :racc_end_parse, nil if @racc_state.size <= 1 287: @racc_state.pop 288: @racc_vstack.pop 289: if @yydebug 290: @racc_tstack.pop 291: racc_e_pop @racc_state, @racc_tstack, @racc_vstack 292: end 293: end 294: return act 295: 296: else 297: raise "[Racc Bug] unknown action #{act.inspect}" 298: end 299: 300: racc_next_state(@racc_state[1], @racc_state) if @yydebug 301: 302: nil 303: end
# File lib/racc/parser.rb, line 80 80: def _racc_init_sysvars 81: @racc_state = [0] 82: @racc_tstack = [] 83: @racc_vstack = [] 84: 85: @racc_t = nil 86: @racc_val = nil 87: 88: @racc_read_next = true 89: 90: @racc_user_yyerror = false 91: @racc_error_status = 0 92: end
# File lib/racc/parser.rb, line 68 68: def _racc_setup 69: @yydebug = false unless self.class::Racc_debug_parser 70: @yydebug = false unless defined?(@yydebug) 71: if @yydebug 72: @racc_debug_out = $stderr unless defined?(@racc_debug_out) 73: @racc_debug_out ||= $stderr 74: end 75: arg = self.class::Racc_arg 76: arg[13] = true if arg.size < 14 77: arg 78: end
# File lib/racc/parser.rb, line 155 155: def _racc_yyparse_rb(recv, mid, arg, c_debug) 156: action_table, action_check, action_default, action_pointer, 157: goto_table, goto_check, goto_default, goto_pointer, 158: nt_base, reduce_table, token_table, shift_n, 159: reduce_n, use_result, * = arg 160: 161: _racc_init_sysvars 162: nerr = 0 163: 164: catch(:racc_end_parse) { 165: until i = action_pointer[@racc_state[1]] 166: while act = _racc_evalact(action_default[@racc_state[1]], arg) 167: ; 168: end 169: end 170: recv.__send__(mid) do |tok, val| 171: unless tok 172: @racc_t = 0 173: else 174: @racc_t = (token_table[tok] or 1) # error token 175: end 176: @racc_val = val 177: @racc_read_next = false 178: 179: i += @racc_t 180: unless i >= 0 and 181: act = action_table[i] and 182: action_check[i] == @racc_state[1] 183: act = action_default[@racc_state[1]] 184: end 185: while act = _racc_evalact(act, arg) 186: ; 187: end 188: 189: while !(i = action_pointer[@racc_state[1]]) || 190: ! @racc_read_next || 191: @racc_t == 0 # $ 192: unless i and i += @racc_t and 193: i >= 0 and 194: act = action_table[i] and 195: action_check[i] == @racc_state[1] 196: act = action_default[@racc_state[1]] 197: end 198: while act = _racc_evalact(act, arg) 199: ; 200: end 201: end 202: end 203: } 204: end
# File lib/racc/parser.rb, line 98 98: def do_parse 99: __send__(Racc_Main_Parsing_Routine, _racc_setup(), false) 100: end
# File lib/racc/parser.rb, line 102 102: def next_token 103: raise NotImplementedError, "#{self.class}\#next_token is not defined" 104: end
# File lib/racc/parser.rb, line 346 346: def on_error(t, val, vstack) 347: raise ParseError, sprintf("\nparse error on value %s (%s)", 348: val.inspect, token_to_str(t) || '?') 349: end
# File lib/racc/parser.rb, line 394 394: def racc_accept 395: @racc_debug_out.puts 'accept' 396: @racc_debug_out.puts 397: end
# File lib/racc/parser.rb, line 399 399: def racc_e_pop(state, tstack, vstack) 400: @racc_debug_out.puts 'error recovering mode: pop token' 401: racc_print_states state 402: racc_print_stacks tstack, vstack 403: @racc_debug_out.puts 404: end
# File lib/racc/parser.rb, line 406 406: def racc_next_state(curstate, state) 407: @racc_debug_out.puts "goto #{curstate}" 408: racc_print_states state 409: @racc_debug_out.puts 410: end
# File lib/racc/parser.rb, line 412 412: def racc_print_stacks(t, v) 413: out = @racc_debug_out 414: out.print ' [' 415: t.each_index do |i| 416: out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')' 417: end 418: out.puts ' ]' 419: end
# File lib/racc/parser.rb, line 421 421: def racc_print_states(s) 422: out = @racc_debug_out 423: out.print ' [' 424: s.each {|st| out.print ' ', st } 425: out.puts ' ]' 426: end
for debugging output
# File lib/racc/parser.rb, line 367 367: def racc_read_token(t, tok, val) 368: @racc_debug_out.print 'read ' 369: @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') ' 370: @racc_debug_out.puts val.inspect 371: @racc_debug_out.puts 372: end
# File lib/racc/parser.rb, line 380 380: def racc_reduce(toks, sim, tstack, vstack) 381: out = @racc_debug_out 382: out.print 'reduce ' 383: if toks.empty? 384: out.print ' <none>' 385: else 386: toks.each {|t| out.print ' ', racc_token2str(t) } 387: end 388: out.puts " --> #{racc_token2str(sim)}" 389: 390: racc_print_stacks tstack, vstack 391: @racc_debug_out.puts 392: end
# File lib/racc/parser.rb, line 374 374: def racc_shift(tok, tstack, vstack) 375: @racc_debug_out.puts "shift #{racc_token2str tok}" 376: racc_print_stacks tstack, vstack 377: @racc_debug_out.puts 378: end
# File lib/racc/parser.rb, line 428 428: def racc_token2str(tok) 429: self.class::Racc_token_to_s_table[tok] or 430: raise "[Racc Bug] can't convert token #{tok} to string" 431: end
# File lib/racc/parser.rb, line 433 433: def token_to_str(t) 434: self.class::Racc_token_to_s_table[t] 435: end
# File lib/racc/parser.rb, line 355 355: def yyaccept 356: throw :racc_jump, 2 357: end
# File lib/racc/parser.rb, line 359 359: def yyerrok 360: @racc_error_status = 0 361: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.