User:Kiken/Construction Site/Implementations/Sōap
Jump to navigation
Jump to search
import re
class SooapError(SyntaxError):
pass
def sooap(code):
functions = {}
vars = {}
result = ''
lineno = 0
code = code.split('\n')
for line in code:
if code[line][len(code[line])] != ':'
raise SooapError('expected \':\'')
if re.sub('\s', '', code[line+1]) == '':
raise SooapError('expected description')
if re.sub('\s', '', code[line+2]) == '':
raise SooapError('description must end with a blank line')
if line > 2:
if line == 3:
if code[line][len(code[line])] != ':'
raise SooapError('expected \':\'')
if code[line] != 'Ingredients:'
raise SooapError('expected title \'Ingredients\'')
if line == 4:
if re.sub('\s', '', code[line]) == '':
raise SooapError('expected list of ingredients')
else:
temp = code[line].split(', ')
if not temp.endswith('.'):
raise SooapError('list of ingredients must end with a period)
for ingredients in temp:
if not ingredients[0].isupper():
raise SooapError('ingredient names must begin with a capitalized letter')
else:
vars[ingredients] = 0
if line == 5:
if not code[line] == '':
raise SooapError('title declarations must end with a blank line')
if line == 6:
if code[line][len(code[line])] != ':'
raise SooapError('expected \':\'')
if code[line] != 'Directions for use:'
raise SooapError('expected title \'Directions for use\'')
if line == 7:
endofsentence = False
if not code[line].startswith('Turn the pump and press.'):
raise SooapError('script must begin with pressing the pump')
else:
temp = re.split('[,.]', code[line].strip(' '))[len(code[line])]
temp1 = [code[line].strip(' ')[len(code[line].strip(' '))]]
for instruction in temp:
punc = temp1[temp.index(instruction)]
if endofsentence and instruction[0].islower():
raise SooapError('beginning of sentences must begin with a capitalized letter')
elif not endofsentence and instruction[0].isupper():
raise SooapError('middle of sentences mustn't begin with a capitalized letter')
else:
if instruction == 'Turn the pump and press':
continue
else:
search = re.search('[tT]he [A-Z][a-z]* will .* your hands clean', instruction)
if search:
varName = re.findall('[A-Z][a-z]*', search.string.strip('The '))[0]
action = re.search('wet|dry|rinse', search.string).group()
if varName in vars:
if action:
if action == 'wet':
vars[varName] -= 1
elif action == 'rinse':
vars[varName] = 0
else:
vars[varName] += 1
else:
raise SooapError(f'invalid action \'{action}\'')
else:
raise SooapError(f'no ingredient named \'{varName}\'')
if punc == '.':
endofsentence = True
else:
endofsentence = False
# working on it