File: //proc/self/root/var/cache/puppet/lib/puppetdb/lexer.rb
#--
# DO NOT MODIFY!!!!
# This file is automatically generated by rex 1.0.5
# from lexical definition file "lib/puppetdb/lexer.rex".
#++
require 'racc/parser'
# vim: syntax=ruby
require 'yaml'
require 'puppetdb'
class PuppetDB::Lexer < 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(/\s/))
;
when (text = @ss.scan(/\(/))
action { [:LPAREN, text] }
when (text = @ss.scan(/\)/))
action { [:RPAREN, text] }
when (text = @ss.scan(/\[/))
action { [:LBRACK, text] }
when (text = @ss.scan(/\]/))
action { [:RBRACK, text] }
when (text = @ss.scan(/\{/))
action { [:LBRACE, text] }
when (text = @ss.scan(/\}/))
action { [:RBRACE, text] }
when (text = @ss.scan(/=/))
action { [:EQUALS, text] }
when (text = @ss.scan(/\!=/))
action { [:NOTEQUALS, text] }
when (text = @ss.scan(/~/))
action { [:MATCH, text] }
when (text = @ss.scan(/\!~/))
action { [:NOTMATCH, text] }
when (text = @ss.scan(/<=/))
action { [:LESSTHANEQ, text] }
when (text = @ss.scan(/</))
action { [:LESSTHAN, text] }
when (text = @ss.scan(/>=/))
action { [:GREATERTHANEQ, text] }
when (text = @ss.scan(/>/))
action { [:GREATERTHAN, text] }
when (text = @ss.scan(/\*/))
action { [:ASTERISK, text] }
when (text = @ss.scan(/\#/))
action { [:HASH, text] }
when (text = @ss.scan(/\./))
action { [:DOT, text] }
when (text = @ss.scan(/not(?![\w_:])/))
action { [:NOT, text] }
when (text = @ss.scan(/and(?![\w_:])/))
action { [:AND, text] }
when (text = @ss.scan(/or(?![\w_:])/))
action { [:OR, text] }
when (text = @ss.scan(/true(?![\w_:])/))
action { [:BOOLEAN, true]}
when (text = @ss.scan(/false(?![\w_:])/))
action { [:BOOLEAN, false]}
when (text = @ss.scan(/-?\d+/))
action { [:NUMBER, text.to_i] }
when (text = @ss.scan(/\"(\\.|[^\\"])*\"/))
action { [:STRING, YAML.load(text)] }
when (text = @ss.scan(/\'(\\.|[^\\'])*\'/))
action { [:STRING, YAML.load(text)] }
when (text = @ss.scan(/[\w_:]+/))
action { [:STRING, text] }
when (text = @ss.scan(/@@/))
action { [:EXPORTED, text] }
when (text = @ss.scan(/@/))
action { [:AT, 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
end # class