public
Created

  • Download Gist
pout_scanner.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
#--
# DO NOT MODIFY!!!!
# This file is automatically generated by rex 1.0.5
# from lexical definition file "pout_scanner.rex".
#++
 
require 'racc/parser'
class PoutScanner < Racc::Parser
require 'strscan'
 
class ScanError < StandardError ; end
 
attr_reader :lineno
attr_reader :filename
attr_accessor :state
 
def scan_setup(str)
@ss = StringScanner.new(str)
@lineno = 1
@state = nil
end
 
def action
yield
end
 
def scan_str(str)
scan_setup(str)
do_parse
end
alias :scan :scan_str
 
def load_file( filename )
@filename = filename
open(filename, "r") do |f|
scan_setup(f.read)
end
end
 
def scan_file( filename )
load_file(filename)
do_parse
end
 
 
def next_token
return if @ss.eos?
# skips empty actions
until token = _next_token or @ss.eos?; end
token
end
 
def _next_token
text = @ss.peek(1)
@lineno += 1 if text == "\n"
token = case @state
when nil
case
when (text = @ss.scan(/\/\(\:[a-z]+\)/))
action { [ [:SLASH, '/'], [:LPAREN, '('], [:SYMBOL, text[2..-2]], [:RPAREN, ')']] }
 
when (text = @ss.scan(/\//))
action { [:SLASH, text] }
 
when (text = @ss.scan(/\:[a-zA-Z]+/))
action { [:SYMBOL, text] }
 
when (text = @ss.scan(/[a-zA-Z]+/))
action { [:LITERAL, text] }
 
else
text = @ss.string[@ss.pos .. -1]
raise ScanError, "can not match: '" + text + "'"
end # if
 
else
raise ScanError, "undefined state: '" + state.to_s + "'"
end # case state
token
end # def _next_token
 
def tokenize(code)
scan_setup(code)
tokens = []
while token = next_token
tokens << token
end
tokens
end
end # class

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.