Skip to content
Snippets Groups Projects
Commit 9fff4adf authored by Antonio MATTAR's avatar Antonio MATTAR
Browse files
parents b262e744 6b154c61
No related branches found
No related tags found
No related merge requests found
from main import * from main import *
# TERME = input('Please enter a Lambda-Term: ') # TERME = input('Please enter a Lambda-Term: ')
#renvoie conteur le nombre de parentheses ouvertes et indexes la liste des indices des parenthese)
def open_parantheses_counter(terme): def open_parantheses_counter(terme):
counter = 0 counter = 0
indexes = [] indexes = []
...@@ -8,7 +9,7 @@ def open_parantheses_counter(terme): ...@@ -8,7 +9,7 @@ def open_parantheses_counter(terme):
counter += 1 counter += 1
indexes.append(i) indexes.append(i)
return (counter, indexes) return (counter, indexes)
# comme celle d avant
def close_parantheses_counter(terme): def close_parantheses_counter(terme):
counter = 0 counter = 0
indexes = [] indexes = []
...@@ -24,7 +25,7 @@ def equal_parantheses(terme): ...@@ -24,7 +25,7 @@ def equal_parantheses(terme):
open_list = ["[","{","("] open_list = ["[","{","("]
close_list = ["]","}",")"] close_list = ["]","}",")"]
# Function to check parentheses # teste si toutes les ouvertes ont ete fermees et quil n y a pas par exemple le cas )(...
def balancedParantheses(terme): def balancedParantheses(terme):
stack = [] stack = []
for i in terme: for i in terme:
...@@ -37,13 +38,16 @@ def balancedParantheses(terme): ...@@ -37,13 +38,16 @@ def balancedParantheses(terme):
stack.pop() stack.pop()
else: else:
return False return False
return len(stack) == 0 if len(stack) == 0:
return True
else:
return False
#renvoie le nombre de parentheses ouvertes qui est aussi le nombre de couples de parenthèses que le terme compte
def parantheses_couples(terme): def parantheses_couples(terme):
assert balancedParantheses(terme), "Not balanced Terme" assert balancedParantheses(terme), "Not balanced Terme"
return (open_parantheses_counter(terme)[0]) return (open_parantheses_counter(terme)[0])
# on lui donne l indice dune parenthese ouverte et renvoie l indice de la parenthese fermante
def findClosingParanthesesIndex(terme, openParentheseIndex): def findClosingParanthesesIndex(terme, openParentheseIndex):
assert balancedParantheses(terme), "Not balanced Terme" assert balancedParantheses(terme), "Not balanced Terme"
closeParantheseIndex = openParentheseIndex closeParantheseIndex = openParentheseIndex
...@@ -58,7 +62,7 @@ def findClosingParanthesesIndex(terme, openParentheseIndex): ...@@ -58,7 +62,7 @@ def findClosingParanthesesIndex(terme, openParentheseIndex):
return closeParantheseIndex return closeParantheseIndex
def checkType(terme): def checkType(terme):
if parantheses_couples(terme) >= 2 and terme[0] == '(' and terme[-1] == ")" and balancedParantheses(terme): if terme[0] == '(' and balancedParantheses(terme):
return APP return APP
elif "#" == terme[0]: elif "#" == terme[0]:
return ABS return ABS
...@@ -75,7 +79,7 @@ def isApplication(terme): ...@@ -75,7 +79,7 @@ def isApplication(terme):
return checkType(terme) == APP return checkType(terme) == APP
#on prend l input de labs en chaine de caractères
def parseInputFromAbs(terme): def parseInputFromAbs(terme):
input = '' input = ''
if checkType(terme) == ABS: if checkType(terme) == ABS:
...@@ -84,7 +88,7 @@ def parseInputFromAbs(terme): ...@@ -84,7 +88,7 @@ def parseInputFromAbs(terme):
input += terme[i] input += terme[i]
i+=1 i+=1
return input return input
# on prend l output en chaine de caractères
def parseOutputFromAbs(terme): def parseOutputFromAbs(terme):
output = '' output = ''
if checkType(terme) == ABS: if checkType(terme) == ABS:
...@@ -113,12 +117,18 @@ def buildApp(terme): ...@@ -113,12 +117,18 @@ def buildApp(terme):
t = new_app(t, buildTerm(liste_de_termes[k])) t = new_app(t, buildTerm(liste_de_termes[k]))
return t return t
A = "#x.(x)(y)"
def buildTerm(terme): def buildTerm(terme):
TermType = checkType(terme) TermType = checkType(terme)
if isVariable(terme): return buildVar(terme) if isVariable(terme): return buildVar(terme)
elif isAbstraction(terme): return buildAbs(terme) elif isAbstraction(terme): return buildAbs(terme)
elif isApplication(terme): return buildApp(terme) elif isApplication(terme): return buildApp(terme)
# renvoie les espaces laissés au debut et a la fin du terme ( ils servent a rien)
def remove_first_and_last_spaces(terme): def remove_first_and_last_spaces(terme):
new_terme = list(terme) new_terme = list(terme)
i = 0 i = 0
...@@ -131,15 +141,18 @@ def remove_first_and_last_spaces(terme): ...@@ -131,15 +141,18 @@ def remove_first_and_last_spaces(terme):
j -=1 j -=1
return "".join([str(letter) for letter in new_terme]) return "".join([str(letter) for letter in new_terme])
# enleve les parentheses quand y a un seul coupme
def remove_inutile_parentheses(terme): def remove_inutile_parentheses(terme):
if parantheses_couples(terme) == 1 : if parantheses_couples(terme) == 1 :
return terme[+1:findClosingParanthesesIndex(terme,0)] return terme[1:-1] # tout sauf le premier et dernier terme
else: else:
return terme return terme
# renvoie ce qu'il y a entre la parenthese ouverte a l indice i et sa parethese fermante
def getTermFromParantheses(terme,i): def getTermFromParantheses(terme,i):
return terme[i+1:findClosingParanthesesIndex(terme,i)] return terme[i+1:findClosingParanthesesIndex(terme,i)]
# renvoie renvoie tous les termes entre parentheses dans terme
def getTermsFromParantheses(terme): def getTermsFromParantheses(terme):
terms = [] terms = []
for i in (open_parantheses_counter(terme)[1]): for i in (open_parantheses_counter(terme)[1]):
...@@ -147,4 +160,16 @@ def getTermsFromParantheses(terme): ...@@ -147,4 +160,16 @@ def getTermsFromParantheses(terme):
return terms return terms
def cleaner(terme): print(getTermsFromParantheses("(AAAAAA)(BBBBBBBBB)(CCCCCCCCC)"))
\ No newline at end of file print(buildTerm(A))
print(remove_first_and_last_spaces('ll'))
print(isAbstraction(A))
print(isApplication("(x)(y)(z)"))
print(checkType("(#x.x)"))
print(buildTerm('(#x.x)(#y.y)'))
print(remove_inutile_parentheses('(#x.x)(#y.y)'))
# print(open_parantheses_counter('((((((((((('))
# print(close_parantheses_counter('((((((((((()'))
# print(buildAbs("#x.ABC"))
# print(checkType("(#x.xx)(fds)"))
# print(findClosingParanthesesIndex('()',0))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment