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

added the possibility to parse [ and {

parent 22616259
No related branches found
No related tags found
No related merge requests found
File deleted
File deleted
File deleted
......@@ -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"
if terme[closeParentheseIndex]== ')':
openParantheseIndex = closeParentheseIndex
counter = 1
while (counter > 0 ):
openParantheseIndex -=1
c = terme[openParantheseIndex]
if c == "(":
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
......
......@@ -86,3 +86,5 @@ import parsing
# beta_reduction_interactive_totale(parsing.parseTerm(input("Enter a term: ")))
### 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment