python, pt.01에서 처음부터 간단한 인터프리터를 구축할 수 있습니다.
6656 단어 pythonfromscratchinterpreter
이 블로그 시리즈에서 우리는 프로그래밍 언어, 인터프리터, 파서, 컴파일러 및 가상 머신을 구축하려는 시도가 성공할 수 있는지 여부를 알 수 있습니다. '왜'로 시작하는 질문에 대한 대답은 항상 '왜 안 되나요?'입니다. 다음을 제외하고:
내가 작성한 코드가 관용적이지 않고 세련되지 않으면 무시하십시오.
시작하자.
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
나를 따라와
Reference
이 문제에 관하여(python, pt.01에서 처음부터 간단한 인터프리터를 구축할 수 있습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/smadev/lets-build-a-simple-interpreter-from-scratch-in-python-pt-01-2ejf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)