class CalcFileLexer
def initialize(f)
@fi = File.open(f, 'r')
@li = ''
end
def reset(f)
@fi.close if @fi
@fi = File.open(f, 'r')
@li = ''
end
def cleanup
@fi.close
end
def yylex
while 1
return [-1, nil] if @fi.eof? && @li.size == 0
@li = @fi.readline unless @fi.eof? || @li.size > 0
if @li =~ /\A[\ \t]+/o
@li = $'
next
end
if @li =~ /\A\n/o
@li = $'
return [?\n, '\n']
end
if @li =~ /\A\+/o
@li = $'
return [?+, '+']
end
if @li =~ /\A\-/o
@li = $'
return [?-, '-']
end
if @li =~ %r!\A\*!o
@li = $'
return [?*, '*']
end
if @li =~ %r!\A/!o
@li = $'
return [?/, '/']
end
if @li =~ /\A\(/o
@li = $'
return [?(, '(']
end
if @li =~ /\A\)/o
@li = $'
return [?), ')']
end
if @li =~ /\A\^/o
@li = $'
return [?^, '^']
end
if @li =~ /\A-?\d+(?:\.\d+)?/o
@li = $'
return [CalcParser::NUM, $&.to_f]
end
raise CalcParser::LexError
end
end
end
syntax highlighted by Code2HTML, v. 0.9.1