0

非常に単純な言語文法のインタープリターを Python で作成しています。Statementいくつかの子クラスを持つスーパークラスがあります。スーパークラスにキーワードを評価するメソッドがあり、CreateStatement見つかったキーワードに基づいて、子クラス オブジェクトのインスタンスを作成します。一部の子クラスは、このメソッドを呼び出す必要があります。

私の問題は、次のエラーが発生することです。

AttributeError: 'Statement' object has no attribute 'Assignment'

ヘルプ!

import re
from TokenHandler import TokenHandler
from ParserException import ParserException

class Statement(object):

    tokens = []
    executedTokens = []

    def __init__(self, tokenlist):
        self.tokens = tokenlist

    def getCurrentToken(self):
        print self.tokens[0]
        return self.tokens[0]

    def createStatement(self):
        currenttoken = self.getCurrentToken()

        t = TokenHandler()

        if currenttoken == "print":
            p = Print(self.tokens)
            return p

        elif t.isVariable(currenttoken):
            a = Assignment(self.tokens)
            return a

        elif currenttoken == "if":
            i = IF(self.tokens)
            return i

        elif currenttoken == "while":
            w = While(self.tokens)
            return w

        elif currenttoken == "begin":
            s = self.CompoundStatement(self.tokens)
            return s

        else:
            raise ParserException('Reserved word \'end\' expected')

    #...other methods...

from Statement import Statement
from TokenHandler import TokenHandler
import VariableException

class Assignment(Statement):

    def __init__(self, tokens = []):
        super(Assignment, self).__init__(tokens)

    #...other methods...
4

1 に答える 1

2
    a = self.Assignment(self.tokens)

Assignmentがモジュールレベルで定義されたサブクラスであり、Statementクラスまたはselfインスタンスの属性ではない場合は間違っています。もしかして

    a = Assignment(self.tokens)

この行はおそらく同様に間違っています:

    s = self.CompoundStatement(self.tokens)
于 2012-04-09T23:45:21.560 に答える