목록전체 글 (31)
PL λαβ

오늘 제공된 강의자료의 read_list 부분 참고하여 구현하지 못했던 read_list 함수까지 완성하였습니다. from data_mark2 import Type, Data, mksym, mkint, nil, nilp, cons from enum import Enum class Error(Enum): Error_OK = 0 Error_Syntax = 1 class Token: def __init__(self, lexeme, location): self.lexeme = lexeme self.location = location def __getitem__(self, idx): return self.lexeme[idx] def match(self, another_token): return self.lexem..
드디어 환경을 만들 차례군요. 환경은 값을 계산하기 위해 필요합니다. 환경이 무엇인지 살펴봅니다. #환경이란? 이름이 포함된 변수 값을 구하려면 환경이 있어야 합니다. 컴파일 과정에서는 이를 심볼 테이블이라고 부르기도 하지요. 영역 규칙을 구현하기 위해 부모 환경을 참조하는 방식으로 구현해야 합니다. # 환경 구현(in Lisp) Lisp에서는 부모를 제외한 바인딩을 Pair로 구현합니다. (부모 (변수1 . 값1) (변수2 . 값2) …) 환경 생성 예를 보면 다음과 같습니다. (Nil (icecream . 31) (ground . Nil) (triple . (a b c))) # 환경 구현(in Python) Python의 사전을 이용하면 환경을 매우 쉽게 구현할 수 있습니다. 다만 부모 환경을 가리키..
아직 코드가 완벽하지 않아서 내일 더 수정하겠습니다. from enum import Enum class Type(Enum): DataType_Nil = 1 DataType_Pair = 2 DataType_Symbol = 3 DataType_Integer = 4 class Keyword(Enum): Plus_OP = 0 Minus_OP = 1 Mul_OP = 2 Div_OP = 3 Lparen = 5 Rparen = 6 Larrow = 8 Rarrow = 9 class TokenSet: def __init__(self): self.stack = [] def add(self, value): self.stack.append(value) return def _show(self): for i in range(le..
예시 코드(www.lwh.jp/lisp/index.html)를 최대한 따라가면서 Token과 Input 클래스 형태로 변환해보려 했습니다. 다만 read_list 함수의 경우 read_expr과 번갈아가며 재귀적으로 호출되는 것을 예시 코드처럼 따라하려했으나, 제대로 동작하지 않아 조금 다른방식으로 시도해보다 실패한 상태입니다. from data_mark2 import Type, Data, mksym, mkint, nil, nilp, cons from enum import Enum class Error(Enum): Error_OK = 0 Error_Syntax = 1 class Token: def __init__(self, lexeme, location): self.lexeme = lexeme self...

Code 👩💻 from enum import Enum class Type(Enum): NIL = 0 INT = 1 PAIR = 2 SYMBOL = 3 class Data: def __init__(self, type=Type.NIL, value=0): self.type = type self.value = value def car(self): return self.value[0] def cdr(self): return self.value[1] def __str__(self): if self.type == Type.NIL: return "NIL" elif self.type == Type.PAIR: try: if(self.cdr() == int(self.cdr())): return "("+str(self.ca..
오늘 강의 내용 중 이해하지 못한 부분이 많아 이것저것 찾아보며 따라해본 수준으로 만들어보았습니다. 주말동안 다시 공부해보고 수정하도록 하겠습니다. class Token: def __init__(self, lexeme, location): self.lexeme = lexeme self.location = location def match(self, another_token): # ? return self.lexeme == another_token.lexeme class Input: def __init__(self, multiline_inputs): self.token_list = [] for line in multiline_inputs: for token in line.split(' '): # space..

LAB 1.2 목표 여러줄의 코드를 입력받아 구문을 분석한다. 어휘 분석을 통해 input을 token으로 변환한 뒤 구문 분석으로 token list를 구문 트리로 변환한다. Input Class, Token Class(including nextToken method), parse function을 구현한다. 최종 완성한 구문 분석기로 만든 구문 트리를 출력한다. 구현 lexer - OK parser - T.T from enum import Enum class Error(Enum): Error_OK = 0 Error_Syntax = 1 class Type(Enum): EOF = 0 OP = 1 CP = 2 DEF = 3 LAM = 4 ID = 5 PLUS_SYM = 6 MINUS_SYM = 7 G_SY..