PL λαβ
Lab 1.1[박인철]: Data 만들기 본문
cons에서 인자를 현재 2개까지 받는 것으로 구현하였음
python 에 enum 모듈을 사용해서 c의 enum을 구현함
car와 cdr의 경우 다양한 인자를 조작하는 메서드이기 떄문에 아래와 같이 구현하였음
from enum import Enum
class Type(Enum):
DataType_Nil = 1
DataType_Pair = 2
DataType_Symbol = 3
DataType_Integer = 4
class Pair:
def __init__(self, value):
self.value = value
class Data:
def __init__(self, type, value):
self.type = type
self.value = value
def __str__(self):
if self.type == Type.DataType_Pair:
(i,j) = self.value
return self.__class__.__name__ + str(self.type) + \
str(i) + str(j)
return self.__class__.__name__ +" "+ str(self.type) +" "+ str(self.value)
def casting(self, type):
self.type = type
def car(token):
if isinstance(token.value, list):
return token.value[0]
else:
return token.value
def cdr(token):
if isinstance(token.value, list):
return token.value[-1]
else:
return token.value
def cons(token, anotherToken):
data = Data(type = Type.DataType_Pair, value = (token, anotherToken))
print(f"( {token.value} . {anotherToken.value} )")
return data
def makeInt(token):
if not isinstance(token.value, int):
token.value = int(token.value)
else:
return
def makeSym(token):
if not isinstance(token.value, str):
token.value = str(token.value)
else:
return
if __name__ == "__main__":
t1 = Data(Type.DataType_Integer, 1)
t2 = Data(Type.DataType_Integer, 2)
print(car(t1))
print(cdr(t2))
t3 = cons(t1, t2)
print(t3)
'kos' 카테고리의 다른 글
Lab 1.2a[김예령]: 구문 분석기 (0) | 2021.04.08 |
---|---|
Lab 1.2: 구문 분석기 (0) | 2021.04.08 |
Lab 1.1[김예령]: Data 만들기 (0) | 2021.04.06 |
Lab 1.1[최준혁]: Data 만들기 (0) | 2021.04.06 |
Lab 1.1: Data 만들기 (0) | 2021.04.06 |
Comments