-
Notifications
You must be signed in to change notification settings - Fork 0
/
parsing.py
executable file
·58 lines (48 loc) · 1.44 KB
/
parsing.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import string
import re
from var import Var
from error import exit_error
autorizedVars = list(string.ascii_uppercase)
authorizedSpecialChars = "+|^()=<>!? \n"
authorizedChars = authorizedSpecialChars +''.join(autorizedVars)
def getQueryRegex():
return "^([(]?([!]?[A-Z])[)]?([+^|][(]?([!]?[A-Z])[)]?)*)(=>|<=>)([(]?([!]?[A-Z])[)]?([+^|][(]?([!]?[A-Z])[)]?)*)$"
def isVar(letter):
for var in autorizedVars:
if var == letter:
return True
return False
def checkAuthorizedChar(letter):
for char in authorizedChars:
if char == letter:
return True
return False;
def fillVar(vars, letter):
if isVar(letter):
if not letter in vars:
vars[letter] = Var(letter)
def checkLine(line, input, output, queries):
regexQuery = getQueryRegex()
regexInput = "^([=][]A-Z]{1,})$"
regexOutput = "^([?][]A-Z]{1,})$"
if re.search(regexQuery, line):
queries.append(line)
elif re.search(regexInput, line):
input.extend(list(line[1:]))
elif re.search(regexOutput, line):
output.extend(list(line[1:]))
else:
exit_error("Unauthorized Line in file: "+ line)
def parseLine(line, vars, input, output, queries):
parsedLine = ""
if len(line.strip()) > 0 and line.strip()[0] != '#':
for letter in line:
if (letter == '#'):
break
if (checkAuthorizedChar(letter)):
if not letter.isspace():
parsedLine += letter
fillVar(vars, letter)
else:
exit_error("Unauthorized char in input file")
checkLine(parsedLine, input, output, queries)