PL λαβ

Lab 1.1[박인철]: Data 만들기 본문

kos

Lab 1.1[박인철]: Data 만들기

inchulnim123 2021. 4. 6. 20:45

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