bug fixy i interfejs

This commit is contained in:
emilekm2142 2019-06-01 14:33:01 +02:00
parent cd8d88dd98
commit 7e03374867
3 changed files with 59 additions and 21 deletions

1
b Normal file
View File

@ -0,0 +1 @@
True

View File

@ -25,6 +25,8 @@ class SimpleInterpreter(AbstractInterpreter):
def isNegation(char): def isNegation(char):
return char == '!' return char == '!'
#print(vars(formula)) #print(vars(formula))
if isSign(formula.s[-1]) and not isParentice(formula.s[-1]): #obrona przed a> na końcu
return False
for i,char in enumerate(formula.s): for i,char in enumerate(formula.s):
if isBlacklisted(char): return False if isBlacklisted(char): return False
@ -53,7 +55,6 @@ class SimpleInterpreter(AbstractInterpreter):
elif not isSign(char) and prev is not None: elif not isSign(char) and prev is not None:
#if current char is a variable #if current char is a variable
if isVariable(prev) and prev is not None: #Obrona abc>d if isVariable(prev) and prev is not None: #Obrona abc>d
print("previous is also a variable");
return False return False
return True return True
class RegexInterpreter(AbstractInterpreter): class RegexInterpreter(AbstractInterpreter):
@ -82,9 +83,10 @@ class RegexInterpreter(AbstractInterpreter):
if not isValid: return False if not isValid: return False
#assertions #assertions
assertions = ['(?:[>|&|\|=][\(\)]*){2,}','\((?:[>|&|\|=][\(\)]*)','[a-z]{2,}','\((?:[>|&|\|=|!])?\)'] assertions = ['(?:[>|&|\|=][\(\)]*){2,}','\((?:[>|&|\|=][\(\)]*)','[a-z]{2,}','\((?:[>|&|\|=|!])?\)', '[>\|&=](?:[^a-z\(]|$)','[^>&\|=](\()' ]
for assertion in assertions: for assertion in assertions:
if not check_assertion(formula,assertion): if not check_assertion(formula,assertion):
#print(assertion)
return False return False
return True return True
@ -95,7 +97,8 @@ class RegexInterpreter(AbstractInterpreter):
#najpierw sprawdzamy, czy parentices są ok #najpierw sprawdzamy, czy parentices są ok
#^(\((?:[^()]++|(?1))*\))$ - powinno zwrócić cały nasz string #^(\((?:[^()]++|(?1))*\))$ - powinno zwrócić cały nasz string
#potem sprawdzamy czy dopasuje cokolwiek co może być nie tak #potem sprawdzamy czy dopasuje cokolwiek co może być nie tak
# [>\|&=](?:[^a-z\(]|$) - operator przed czymś innym niż nawias otwierający lub zmienna
# [^>&\|=](\() - zmienna przed nawiasem bez operatora pomiędzy
# \((?:[>|&|\|=][\(\)]*) - (>b) # \((?:[>|&|\|=][\(\)]*) - (>b)
# [a-z]{2,} - czy powtarzają się jakieś lierki obok siebie? # [a-z]{2,} - czy powtarzają się jakieś lierki obok siebie?
# \((?:[>|&|\|=|!])?\) - czy istnieją puste nawiasy, bądź nawiasy z samym operatorem? # \((?:[>|&|\|=|!])?\) - czy istnieją puste nawiasy, bądź nawiasy z samym operatorem?
@ -190,9 +193,21 @@ class Formula:
def isValid(self, interpreter=None)->bool: def isValid(self, interpreter=None)->bool:
i = self.__i if interpreter is None else interpreter i = self.__i if interpreter is None else interpreter
return i.isValid(self) return i.isValid(self)
def print_help():
print("""
Użycie:
python program.py -f plik.txt
python program.py a&b>c|(a&!g
python program.py
python program.py -h
""")
sim = SimpleInterpreter() sim = SimpleInterpreter()
if len(sys.argv) > 1 : if len(sys.argv) > 1 :
i = ProperInterpreter() i = ProperInterpreter()
if '-h' in sys.argv:
print_help()
else:
if '-g' in sys.argv: if '-g' in sys.argv:
i = RegexInterpreter() i = RegexInterpreter()
#print(sys.argv) #print(sys.argv)
@ -205,11 +220,33 @@ if len(sys.argv) > 1 :
for l in u: for l in u:
print(Formula(l.replace("\n",'').replace("\r",''),i).isValid()) print(Formula(l.replace("\n",'').replace("\r",''),i).isValid())
else: else:
print( o = sys.argv[1] if sys.argv[1] != '-g' else sys.argv[2]
Formula(sys.argv[1] if sys.argv[1] != '-g' else sys.argv[2],i).isValid() if len(o)>0:
) print(Formula(o,i).isValid())
else: else:
print("help?") print_help()
print("Tryb interaktywny:")
print("Wprowadź formułę lub wpisz \n\n 1. Regex \n 2. Regular \n \n aby zmienić rodzaj używanego walidatora. Domyślnym jest Regular.\n Wpisz exit żeby wyjść")
i = ProperInterpreter()
while True:
try:
x = input('> ')
except:
break
if x=="Regex":
i=RegexInterpreter()
print("Zmieniono walidator")
elif x=="Regular":
i=ProperInterpreter()
print("Zmieniono walidator")
elif x=="exit" or x =="Exit":
break
else:
print(Formula(x,i).isValid())

View File

@ -1,7 +1,7 @@
(a>) (a>)
(>) (>)
()(a) ()(a)
a
a(b&c)>d a(b&c)>d
(b&d)d (b&d)d
(a>b)>k a>
b&d&