diff --git a/__pycache__/image_maker.cpython-39.pyc b/__pycache__/image_maker.cpython-39.pyc deleted file mode 100644 index f8e8cdcd60249af089db19df421c4166cf98156a..0000000000000000000000000000000000000000 Binary files a/__pycache__/image_maker.cpython-39.pyc and /dev/null differ diff --git a/__pycache__/logic.cpython-39.pyc b/__pycache__/logic.cpython-39.pyc deleted file mode 100644 index 0e5a612df66d64a7a7f7804140de1d3b781e7477..0000000000000000000000000000000000000000 Binary files a/__pycache__/logic.cpython-39.pyc and /dev/null differ diff --git a/__pycache__/parsing.cpython-39.pyc b/__pycache__/parsing.cpython-39.pyc deleted file mode 100644 index d916578212688390b3b2924be2927dea4a3e1c27..0000000000000000000000000000000000000000 Binary files a/__pycache__/parsing.cpython-39.pyc and /dev/null differ diff --git a/parsing.py b/parsing.py index e9b7229ec9c59de8296a6eb47b2bffc1a777e2d1..5ea15e981c194ea03fd8cea1461c2708a555559e 100644 --- a/parsing.py +++ b/parsing.py @@ -9,16 +9,18 @@ def open_parantheses_counter(terme): counter = 0 indexes = [] for i in range(len(terme)): - if terme[i] == '(': + if terme[i] == '(' or terme[i]=='[' or terme[i]=='{': counter += 1 indexes.append(i) return (counter, indexes) + + # comme celle d avant def close_parantheses_counter(terme): counter = 0 indexes = [] for i in range(len(terme)): - if terme[i] == ')': + if terme[i] == ')' or terme[i]==']' or terme[i]=='}': counter += 1 indexes.append(i) return (counter, indexes) @@ -48,15 +50,17 @@ def parantheses_couples(terme): def findOpeningParanthesesIndex(terme, closeParentheseIndex): assert balancedParantheses(terme), "Not balanced Terme" - openParantheseIndex = closeParentheseIndex - counter = 1 - while (counter > 0 ): - openParantheseIndex -=1 - c = terme[openParantheseIndex] - if c == "(": + if terme[closeParentheseIndex]== ')': + openParantheseIndex = closeParentheseIndex + counter = 1 + while (counter > 0 ): + openParantheseIndex -=1 + c = terme[openParantheseIndex] + if c in open_list: counter -= 1 - elif c == ")": + elif c in close_list: counter += 1 + return openParantheseIndex @@ -68,9 +72,9 @@ def findClosingParanthesesIndex(terme, openParentheseIndex): while (counter > 0 ): closeParantheseIndex +=1 c = terme[closeParantheseIndex] - if c == "(": + if c == "(" or c=='{' or c=='[': counter += 1 - elif c == ")": + elif c == ")" or c==']' or c=='}': counter -= 1 return closeParantheseIndex @@ -86,7 +90,7 @@ def getTermsFromParantheses(terme): # terms.append(getTermFromParantheses(terme,indexes_of_open_parantheses[i])) i = 0 while i < len(terme): - if terme[i] == '(': + if terme[i] == '(' or terme[i]=='{' or terme[i]=='[': terms.append(getTermFromParantheses(terme,i)) i = findClosingParanthesesIndex(terme,i) else: @@ -110,13 +114,13 @@ def remove_multiple_spaces(terme): def checkType(terme): if "#" == terme[0]: return ABS - elif terme[0] == '(': + elif terme[0] == '(' or terme[0]=='{' or terme[0]=='[': l = getTermsFromParantheses(terme) - if len(l) == 1 and terme[-1] == ')': + if len(l) == 1 and ( (terme[-1] == ')' or terme[-1]==']' or terme[-1]=='}')): return checkType(getTermFromParantheses(terme,0)) else: return APP - elif not(any(charac in (terme) for charac in ['(',')',' ','#','.'])): + elif not(any(charac in (terme) for charac in ['(',')',' ','#','.', '[', ']','{','}'])): return VAR else: return APP @@ -149,7 +153,7 @@ def extractOutputFromAbs(terme): def buildVar(terme): assert (checkType(terme) == VAR) # print(terme) - if terme[0]!='(': + if terme[0]!='(' and terme[0]!='{' and terme[0]!='[': if terme in variables: return variables[terme] else: @@ -163,7 +167,7 @@ def buildAbs(terme): input = extractInputFromAbs(terme) output = extractOutputFromAbs(terme) # print(terme,"INPUT:", input,'OUTPUT:', output) - if terme [0]!= '(': + if not(terme [0] in open_list): return new_abs((buildTerm(input)),buildTerm(output)) else: return buildTerm(getTermFromParantheses(terme,0)) @@ -173,13 +177,13 @@ def extract_terms(text): current_term = "" paranthesis_level = 0 for i in range(len(text)): - if text[i] == "(": + if text[i] == "(" or text[i]=='{' or text[i]=='[' : if paranthesis_level == 0: current_term = "" else: current_term += text[i] paranthesis_level += 1 - elif text[i] == ")": + elif text[i] == ")" or text[i]==']' or text[i]=='}': paranthesis_level -= 1 if paranthesis_level > 0: current_term += text[i] @@ -196,7 +200,7 @@ def extract_terms(text): def buildApp(terme): assert (checkType(terme) == APP) liste_de_termes = extract_terms(terme) - if terme[0]!='(': + if terme[0]!='(' and terme[0]!='{' and terme[0]!='[': n = len(liste_de_termes) if n == 0: return None diff --git a/tests.py b/tests.py index 46e35b5e2b6e4d95b967a157b3f04877ce9f4c12..59a6155865711ecd0543c0cd4c2602411e948d31 100644 --- a/tests.py +++ b/tests.py @@ -85,4 +85,6 @@ import parsing #beta_reduction_interactive_totale(parsing.parseTerm(input("Enter a term: "))) # beta_reduction_interactive_totale(parsing.parseTerm(input("Enter a term: "))) -### ADD SAVE IMAGE CHOICE FOR BETA REDUCTION!!!! \ No newline at end of file +### ADD SAVE IMAGE CHOICE FOR BETA REDUCTION!!!! +#print(parsing.buildTerm("(#x.[#y.(y n)])")) +#print(parsing.buildTerm("(#x.[#y.(y n)])")) \ No newline at end of file