
Добавил:
linnesse
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Код лаб / Notation
.pyfrom array import array
import ctypes
from LinkedList import LinkedList
from ArrayList import ArrayList
#OPERATORS = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
#FUNC = ['sin', 'cos']
OPERATORS = ArrayList()
OPERATORS.add('+')
OPERATORS.add('-')
OPERATORS.add('*')
OPERATORS.add('/')
OPERATORS.add('^')
OPERATORS_IND = ArrayList()
OPERATORS_IND.add(1)
OPERATORS_IND.add(1)
OPERATORS_IND.add(2)
OPERATORS_IND.add(2)
OPERATORS_IND.add(3)
FUNC = ArrayList()
FUNC.add('sin')
FUNC.add('cos')
#while el_top in OPERATORS and OPERATORS[element] <= OPERATORS[el_top]
class Stack():
def __init__(self):
self.head = None
class Node:
def __init__(self, data, next):
self.data = data
self.next = next
def isEmpty(self):
return self.head is None
def push(self, element):
self.head = self.Node(element, self.head)
def pop(self):
if self.isEmpty():
print("None")
return
element = self.head.data
self.head = self.head.next
return element
def peek(self):
if not self.isEmpty():
return self.head.data
def Notation(formula):
stack = Stack()
input = " "
print("Tokens: ", end='')
formula.out()
for i in range(formula.size()):
element = formula.get(i)
if element in '1234567890':
input += element
elif FUNC.contains(element):
stack.push(element)
elif OPERATORS.contains(element):
el_top = stack.peek()
while OPERATORS.contains(el_top) and OPERATORS_IND.get(
OPERATORS.indexOf(element)) <= OPERATORS_IND.get(
OPERATORS.indexOf(el_top)):
input += stack.pop()
el_top = stack.peek()
stack.push(element)
elif element == '(':
stack.push(element)
elif element == ')':
while stack.peek() != '(':
if not stack.isEmpty():
input += stack.pop()
else:
print("Error")
return
stack.pop()
while not stack.isEmpty():
if stack.peek() == '(':
print("Error")
return
input += stack.pop()
print(input)
#list = ArrayList()
#str = '7 + 8 * sin ( 5 + 2 )'
#list.split(str)
#Notation(list)
#test 5 * 6 - 7
#output 56*7-
#test ( 5 - 6 ) * 7
#output 56-7*
#test sin ( 5 * 6 )
#output 56*sin
#test 5 / 8 * ( 9 + 4 ) - 3 * ( 2 * 5 )
#output 58/94+*325**-
#test cos ( 8 / 9 * ( 5 + 4 * 7 ) )
#output 89/547*+*cos
#test ( 8 ^ 7 * 4 + 2 ) + 1 + 9 * 7 + 5
#output 87^4*2+1+97*+5+
#test 8 * sin ( 5 + 2 )
#output 7852+sin*+
Соседние файлы в папке Код лаб