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

안녕!.
이 블로그 시리즈에서 우리는 프로그래밍 언어, 인터프리터, 파서, 컴파일러 및 가상 머신을 구축하려는 시도가 성공할 수 있는지 여부를 알 수 있습니다. '왜'로 시작하는 질문에 대한 대답은 항상 '왜 안 되나요?'입니다. 다음을 제외하고:
  • 왜 파이썬인가? Python을 사용하면 언어 자체와 싸우기보다 문제에 집중할 수 있습니다.
  • 왜 러스트가 아니겠습니까? 녹은 그것에 맞서 싸우는 동안 탈모를 유발합니다.
  • C는 왜 안되지? 그것은 당신의 손에서 여러 번 폭발합니다. 당신은 당신의 손을 잃게됩니다.

  • 내가 작성한 코드가 관용적이지 않고 세련되지 않으면 무시하십시오.
    시작하자.

    class Interpreter:
        def __init__(self):
            pass
    
        def run(self,code):
            for xs in code:
                self.eval(xs)
    
    
        # This is our magic function. It evauates xs parameter 
        # according to its first element  and calls appropriate 
        # member function and passes the parameter to that function.
        # If xs is not a list then returns xs itself:
    
        def eval(self,xs):
            if isinstance(xs,list):
                return self.__getattribute__(xs[0])(xs)
            return xs
    
    
        # Our first function (or opcode) is Print. If last item 
        # is a comma it doesn't print newline:  
    
        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="")
    
    # This is AST (Abstract Syntax Tree) generated by 
    # parser. Consisting of recursive lists
    # (No, not lisp :P )
    code=[
        ["Print","Hello World!","Sky is blue"],
        ["Print",1,","],
        ["Print",2,","],
        ["Print",3],
        ["Print","a"],
        ["Print","b"],
        ["Print"],
        ["Print","c"],
    ]
    
    interpreter=Interpreter()
    
    interpreter.run(code)
    


    출력은 다음과 같습니다.

    Hello World!Sky is blue
    1,2,3
    a
    b
    
    c
    


    나를 따라와

    좋은 웹페이지 즐겨찾기