#!/usr/bin/ruby def checkSquareBrackets(line) count = 0 line.each_char do |char| if char == '[' count += 1 elsif char == ']' count -= 1 end if count < 0 return false end end if count!=0 return false end return true end def checkChar(char) return char == '+' || char == '-' || char == '[' || char == ']' || (('a'..'z').include? char) || (('0'..'9').include? char) || (('BDIPSX').include? char) end def ok() puts "OK" end def error() puts "ERROR" end def checkLine(line) if checkSquareBrackets(line) base_found = false index_found = false var_found = false pos_var = false expression_start = true mem_chr = nil mem_no = nil sign_present = false line.each_char do |char| if checkChar(char) if expression_start && (char == '+' || char == '-') error() return end if char == ']' && sign_present error() return end if ('a'..'z').include? char.downcase if mem_chr reg = mem_chr.downcase + char.downcase if reg == 'bp' || reg == 'bx' if base_found error() return else base_found = true end elsif reg == 'si' || reg == 'di' if index_found error() return else inedx_found = true end else error() return end pos_var = false else if mem_no error() return end pos_var = true end else if pos_var pos_var = false unless ('a'..'z').include? mem_chr error() return end if var_found error() return else var_found = true end end end if (('0'..'9').include? char) && mem_chr error() return end mem_chr = (('a'..'z').include? char.downcase) ? char : nil mem_no = (('0'..'9').include? char) ? char : nil expression_start = char == '[' sign_present = char == '+' || char == '-' else error() return end end if pos_var && var_found error() return end if sign_present error() return end ok() else error() end end $stdin.each do |line| if line.length == 1 && line.chomp.length == 0 break end line = line.chomp checkLine(line) end