python, pt.02 Basic Arithmetic에서 처음부터 간단한 인터프리터를 구축할 수 있습니다.

영리한 사람들이 작성한 인터넷에는 이 주제에 대한 훌륭한 튜토리얼이 많이 있습니다. 내 게시물이 그들만큼 훌륭하지 않거나 학문적 스타일이 좋지 않을 수도 있지만 항상 가능한 한 단순하게 유지하려고 노력할 것입니다. KISS

이 게시물에서는 인터프리터에 기본 산술을 추가합니다.

class Interpreter:
    def __init__(self):
        pass

    def run(self,code):
        for xs in code:
            self.eval(xs)

    def eval(self,xs):
        if isinstance(xs,list):
            return self.__getattribute__(xs[0])(xs)
        return xs

    def Print(self,xs):
        if len(xs)==1:
            print()
            return
        l=len(xs)-1
        for i,x in enumerate(xs[1:]):
            e=self.eval(x)
            if i<l-1:
                print(e,end="")
            else:
                if e!=",":
                    print(e)
                else:
                    print(e,end="")

    # Basic arithmetic operations,
    # Notice how we call self.eval function recursively:

    def Add(self,xs):
        return self.eval(xs[1])+self.eval(xs[2])
    def Sub(self,xs):
        return self.eval(xs[1])-self.eval(xs[2])
    def Mul(self,xs):
        return self.eval(xs[1])*self.eval(xs[2])
    def Div(self,xs):
        return self.eval(xs[1])/self.eval(xs[2])

code=[

    ["Print","3 + 5 = ", ["Add", 3, 5]  ],

    ["Print","1 - 2 * 3 = ", ["Sub", 1, ["Mul", 2, 3] ] ],

    ["Print",["Add", "Hello ", "again "],"W",["Mul","o",10],"rld!"],

]

interpreter=Interpreter()

interpreter.run(code)


산출:

3 + 5 = 8
1 - 2 * 3 = -5
Hello again Woooooooooorld!


링크: Patreon

좋은 웹페이지 즐겨찾기