Skip to content
Snippets Groups Projects
Commit 6b154c61 authored by Tamazouzt AIT ELDJOUDI's avatar Tamazouzt AIT ELDJOUDI
Browse files

commentaires

parent a0e6b1bf
No related branches found
No related tags found
No related merge requests found
from main import *
# 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):
counter = 0
indexes = []
......@@ -8,7 +9,7 @@ def open_parantheses_counter(terme):
counter += 1
indexes.append(i)
return (counter, indexes)
# comme celle d avant
def close_parantheses_counter(terme):
counter = 0
indexes = []
......@@ -24,7 +25,7 @@ def equal_parantheses(terme):
open_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):
stack = []
for i in terme:
......@@ -41,11 +42,12 @@ def balancedParantheses(terme):
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):
assert balancedParantheses(terme), "Not balanced Terme"
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):
assert balancedParantheses(terme), "Not balanced Terme"
closeParantheseIndex = openParentheseIndex
......@@ -60,7 +62,7 @@ def findClosingParanthesesIndex(terme, openParentheseIndex):
return closeParantheseIndex
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
elif "#" == terme[0]:
return ABS
......@@ -77,7 +79,7 @@ def isApplication(terme):
return checkType(terme) == APP
#on prend l input de labs en chaine de caractères
def parseInputFromAbs(terme):
input = ''
if checkType(terme) == ABS:
......@@ -86,7 +88,7 @@ def parseInputFromAbs(terme):
input += terme[i]
i+=1
return input
# on prend l output en chaine de caractères
def parseOutputFromAbs(terme):
output = ''
if checkType(terme) == ABS:
......@@ -126,7 +128,7 @@ def buildTerm(terme):
if isVariable(terme): return buildVar(terme)
elif isAbstraction(terme): return buildAbs(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):
new_terme = list(terme)
i = 0
......@@ -139,15 +141,18 @@ def remove_first_and_last_spaces(terme):
j -=1
return "".join([str(letter) for letter in new_terme])
def remove_inutile_spaces(terme):
if parantheses_couples(terme) == 1 and terme[0] == '(' and terme[-1] == ")":
return terme[1:-1]
# enleve les parentheses quand y a un seul coupme
def remove_inutile_parentheses(terme):
if parantheses_couples(terme) == 1 :
return terme[1:-1] # tout sauf le premier et dernier terme
else:
return terme
# renvoie ce qu'il y a entre la parenthese ouverte a l indice i et sa parethese fermante
def getTermFromParantheses(terme,i):
return terme[i+1:findClosingParanthesesIndex(terme,i)]
# renvoie renvoie tous les termes entre parentheses dans terme
def getTermsFromParantheses(terme):
terms = []
for i in (open_parantheses_counter(terme)[1]):
......@@ -162,7 +167,7 @@ print(isAbstraction(A))
print(isApplication("(x)(y)(z)"))
print(checkType("(#x.x)"))
print(buildTerm('(#x.x)(#y.y)'))
print(remove_inutile_spaces('(#x.x)(#y.y)'))
print(remove_inutile_parentheses('(#x.x)(#y.y)'))
# print(open_parantheses_counter('((((((((((('))
# print(close_parantheses_counter('((((((((((()'))
# print(buildAbs("#x.ABC"))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment