PL λαβ
Lab 2.2b[김예령]: 기본 함수 본문
Comment
조교님과 최준혁선배님의 코드를 합쳐 환경과 기본함수를 수정한 뒤 사칙연산 함수를 추가했습니다.
Result
Code
코드가 500줄이 넘어가는 관계 상 추가한 부분만 올립니다. 전체코드는 github.com/icaruswithoutwings/CrazyRichWeekendFarm 에서 확인할 수 있습니다.
def builtin_plus(args):
if (args.car().type == Type.INT) and (args.cdr().car().type == Type.INT):
var = (args.car().value) + (args.cdr().car().value)
return "Error OK", mkint(var)
return "Error Args", nilp()
def builtin_minus(args):
if (args.car().type == Type.INT) and (args.cdr().car().type == Type.INT):
var = (args.car().value) - (args.cdr().car().value)
return "Error OK", mkint(var)
return "Error Args", nilp()
def builtin_multi(args):
if (args.car().type == Type.INT) and (args.cdr().car().type == Type.INT):
var = (args.car().value) * (args.cdr().car().value)
return "Error OK", mkint(var)
return "Error Args", nilp()
def builtin_divide(args):
if (args.car().type == Type.INT) and (args.cdr().car().type == Type.INT):
if args.cdr().car().value != 0:
var = (args.car().value) / (args.cdr().car().value)
return "Error OK", mkint(var)
else:
return "Divide Zero Error", nilp()
return "Error Args", nilp()
if __name__ == "__main__":
env = env_create(nilp())
env_set(env, mksym("CAR"), make_builtin(builtin_car))
env_set(env, mksym("CDR"), make_builtin(builtin_cdr))
env_set(env, mksym("CONS"), make_builtin(builtin_cons))
env_set(env, mksym("+"), make_builtin(builtin_plus))
env_set(env, mksym("-"), make_builtin(builtin_minus))
env_set(env, mksym("*"), make_builtin(builtin_multi))
env_set(env, mksym("/"), make_builtin(builtin_divide))
while True:
parsedlist = Parser(Lexer(Input()._input()).lex())
# print("\n===== === PAR === =====")
# print(parsedlist)
# print("===== === OUT === =====")
print(eval_expr(parsedlist, env))
# print(env.symbols)
'kos' 카테고리의 다른 글
Lab 3.1a[김예령]: 람다와 클로저 (0) | 2021.04.29 |
---|---|
Lab 3.1a[최준혁]: 람다와 클로저 (0) | 2021.04.27 |
Lab 3.1: 람다와 클로저 (0) | 2021.04.27 |
Lab 2.1a[박인철]: 환경 (0) | 2021.04.27 |
Lab 2.2[최준혁]: 기본 함수 (0) | 2021.04.24 |
Comments