class JGrep::Scanner
Attributes
arguments[RW]
token_index[RW]
Public Class Methods
new(arguments)
click to toggle source
# File lib/parser/scanner.rb, line 5 def initialize(arguments) @token_index = 0 @arguments = arguments end
Public Instance Methods
get_token()
click to toggle source
Scans the input string and identifies single language tokens
# File lib/parser/scanner.rb, line 11 def get_token if @token_index >= @arguments.size return nil end begin case @arguments.split("")[@token_index] when "[" return "statement", gen_substatement when "]" return "]" when "(" return "(", "(" when ")" return ")", ")" when "n" if (@arguments.split("")[@token_index + 1] == "o") && (@arguments.split("")[@token_index + 2] == "t") && ((@arguments.split("")[@token_index + 3] == " ") || (@arguments.split("")[@token_index + 3] == "(")) @token_index += 2 return "not", "not" else gen_statement end when "!" return "not", "not" when "a" if (@arguments.split("")[@token_index + 1] == "n") && (@arguments.split("")[@token_index + 2] == "d") && ((@arguments.split("")[@token_index + 3] == " ") || (@arguments.split("")[@token_index + 3] == "(")) @token_index += 2 return "and", "and" else gen_statement end when "&" if(@arguments.split("")[@token_index +1] == "&") @token_index +=1 return "and", "and" else gen_statement end when "o" if (@arguments.split("")[@token_index + 1] == "r") && ((@arguments.split("")[@token_index + 2] == " ") || (@arguments.split("")[@token_index + 2] == "(")) @token_index += 1 return "or", "or" else gen_statement end when "|" if(@arguments.split("")[@token_index +1] == "|") @token_index +=1 return "or", "or" else gen_statement end when "+" value = "" i = @token_index + 1 begin value += @arguments.split("")[i] i += 1 end until (i >= @arguments.size) || (@arguments.split("")[i] =~ /\s|\)/) @token_index = i - 1 return "+", value when "-" value = "" i = @token_index + 1 begin value += @arguments.split("")[i] i += 1 end until (i >= @arguments.size) || (@arguments.split("")[i] =~ /\s|\)/) @token_index = i - 1 return "-", value when " " return " ", " " else gen_statement end end rescue NoMethodError => e raise "Error. Expression cannot be parsed." end
Private Instance Methods
gen_statement()
click to toggle source
# File lib/parser/scanner.rb, line 122 def gen_statement current_token_value = "" j = @token_index begin if (@arguments.split("")[j] == "/") begin current_token_value << @arguments.split("")[j] j += 1 if @arguments.split("")[j] == "/" current_token_value << "/" break end end until (j >= @arguments.size) || (@arguments.split("")[j] =~ /\//) else begin current_token_value << @arguments.split("")[j] j += 1 if @arguments.split("")[j] =~ /'|"/ begin current_token_value << @arguments.split("")[j] j +=1 end until (j >= @arguments.size) || (@arguments.split("")[j] =~ /'|"/) end end until (j >= @arguments.size) || (@arguments.split("")[j] =~ /\s|\)|\]/) end rescue Exception => e raise "Invalid token found - '#{current_token_value}'" end if current_token_value =~ /^(and|or|not|!)$/ raise "Class name cannot be 'and', 'or', 'not'. Found '#{current_token_value}'" end @token_index += current_token_value.size - 1 return "statement", current_token_value end
gen_substatement()
click to toggle source
# File lib/parser/scanner.rb, line 110 def gen_substatement @token_index += 1 returnval = [] while (val = get_token) != "]" @token_index += 1 returnval << val unless val[0] == " " end return returnval end