Created
January 30, 2013 09:46
-
-
Save neerajsingh0101/4672018 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-- | |
# 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment