中缀到后缀的转换器python2.7

2024-05-16 13:56:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python中创建一个用于家庭作业的中缀到后缀的转换器,我在网上找到了多个看起来足够简单的转换器,但没有一个满足我需要的要求。我必须使用以下课程:

class Token(object):

    UNKNOWN     = 0             # unknown
    INT         = 4             # integer
    MINUS       = 5             # minus operator
    PLUS        = 6             # plus operator
    MUL         = 7             # multiply operator
    DIV         = 8             # divide operator

    FIRST_OP    = 5             # first operator code

    def getPrecedence(self):
        if self is '(':
            return 0

        elif self is '+'or '-':
            return 1

        elif self is '*' or '/':
            return 2

        else:
            return 3

    def _init_(self, value):
        if type(value) == int:
            self._type = Token.INT
        else:
        self._type = self._makeType(value)
        self._value = value

    def isOperator(self):
        return self._type >= Token.FIRST_OP

    def _str_(self):
        return str(self._value)

    def getType(self):
        return self._type

    def getValue(self):
        return self._value

    def _makeType(self, ch):
        if   ch == '*': return Token.MUL
        elif ch == '/': return Token.DIV
        elif ch == '+': return Token.PLUS
        elif ch == '-': return Token.MINUS
        else:           return Token.UNKNOWN;

我不得不添加getPrecedence():方法,它返回一个表示运算符优先级的整数。我还必须使用以下课程:

^{pr2}$

我必须编写一个程序,将中缀表达式转换为后缀表达式。这个程序应该使用Token和Scanner类(我在上面已经包括了)。程序应该包括一个预处理输入和输出的主函数和一个名为IFToPFConverter的类。main函数接收一个输入字符串,然后用它创建一个扫描仪。扫描器然后作为参数传递给converter对象的构造函数。然后运行converter objects convert方法来转换中缀表达式。此方法返回表示后缀字符串的标记列表。然后main函数显示这个字符串。以下是我目前所掌握的情况:

from arrayStack import ArrayStack
from token import Token
from scanner import Scanner

class IFToPFConverter(object):

     def convert(self):
        opStack = Stack()
        postFixList = []

        while self._scanner.hasNext():
            currentToken = self._scanner.next()
            if currentToken in '0123456789'
                postFixList.append(currentToken)
            elif currentToken == '(':
                opStack.push(currentToken)
            elif currentToken == '*':
                opStack.push(currentToken)
            elif currentToken == '/':
                opStack.push(currentToken)
            elif currentToken == '+':
                opStack.push(currentToken)
            elif currentToken == '-':
                opStack.push(currentToken)
            elif currentToken == ')':
                opStack.push(currentToken)

         while not opStack.isEmpty():                

def main():
    sourceStr = raw_input("Please enter an expression:")
    scanner = Scanner(sourceStr)
    conversion = IFToConverter.convert(scanner)
    return conversion

main()  

我不知道该怎么办,我甚至不知道我在IFToPFConverter课堂上所做的是否有效。我见过更简单的中缀到后缀转换器,我对编程相当陌生,所以这似乎有很多东西需要理解。我需要任何可能的帮助,谢谢。在


Tags: selftokenreturnvaluedeftypechoperator