После передачи строки, я ищу “#”, означающие комментарий в строке, и если он есть, то строка игнорируется. Если же нет - то идем дальше анализировать. Ищем find'ом одинарные и двойные кавычки, т.к. в результаты поиска не включаем операторы, которые включены в строку (типа puts (“Key=15”)). Если же оператор найденными нами, не входит в строку, то записываем в словарь, и делаем срез от этого выбранного шаблона, до конца строка.
Но возникла проблема, которая меня поразила. На строке:
if (index!=-1 and indexSharp!=-1) or (index!=-1 and index<indexSharp):
Код:
class RubyOperations: def __init__(self,code,cnt): self._code = code self._cnt = cnt @property def findOperators(self): """ Возвращает операторы в виде словаря, указанного в строке self._code """ dictionary={} # шаблон поиска pattern=["=","+","-","*","/","%","**","==","+=","-=","*=", "/=","**=","%=","===","!=",">=",">","<=","<","<=>", ".eql?","equal?","not","and","or","||","&&","!", ">>","<<","^","~"] indexSharp=self._code.find("#") for i in pattern: block=self._code[:] cntOp=block.count(i) while(cntOp!=0): index =block.find(i) index_r1=block.find("\'") index_r2=block.find("\"") if (index!=-1 and indexSharp!==-1) or (index!=-1 and index<indexSharp): if index<index_r1 or index<index_r2: break else: block=size._code[index+len(i):] dictionary[self._cnt]=i self._cnt+=1 cntOp-=1 return dictionary if __name__ == '__main__': obj=RubyOperations("rb_clicked = Proc.new",0) print(obj.findOperators)