- 이번 과제는 프로그래밍 언어의 어휘 분석기(lexical analyzer or scanner) 와 구문 분석기(syntax analyzer or parser)를 Scala로 구현해보는 것입니다. 압축 파일에 포함된 스켈레톤 코드들에 대한 설명을 천천히 읽어보고 코드의 구조와 동작에 대해 충분히 숙지를 한 상태에서 진행하시기 바랍니다.
- ‘PL_Parser.zip’ 압축파일은 calculator.scala, token.scala, tokenizer.scala로 구성되어 있습니다. 이 Scala 파일들은 과제 수행을 위해 필요한 기본적인 스켈레톤 코드들을 포함하고 있습니다.
- 제출방법 : 완성된 calculator.scala, token.scala, tokenizer.scala 파일들과 출력 화면을 캡쳐한 이미지를 하나의 파일로 압축한 후 ‘학번_hw5.zip’ 로 저장하여 Uclass 과제 게시판에 업로드해주세요.
- 제출기한 : 6월 17일 월요일 11:59pm
과제 진행 시 어려운 점이 있으면 Ed Discussion 게시판을 이용해 질문하세요. 게시판을 통해 하기 어려운 질문이라면 아래 TA 이메일을 통해 문의하시기 바랍니다.
조교: Aditi(diwakarmzu@gmail.com)
과제 설명
이번 과제는 Scala 언어를 사용하여 계산기를 구현하는 과제입니다.
1) 어휘 분석기에서 숫자를 인식하는 부분 구현
- tokenizer.scala 파일의 아래 부분을 구현하세요.
- Hint) Case 1, Case 3 참고
2) 변수를 사용할 수 있는 계산기 구현
- 주어진 코드를 실행한 후 명령 프롬프트에 명령을 입력했을 때 올바른 구문이면 수행 결과를 출력하고 잘못된 구문이면 구문 오류(syntax error)를 출력합니다.
- 이 프로그램은 배정문과 수식, 이 두 가지 종류의 명령을 수행할 수 있습니다.
- 배정문을 입력으로 받으면 기호표(symbol table)에 변수의 식별자와 이 변수가 갖는 값을 쌍으로 저장합니다.
- Hint) scala.collection.Map 사용
- 수식을 입력으로 받으면 수식을 평가하여 결과를 출력합니다.
- 수식은 이미 정의된 변수의 식별자 또는 수를 포함할 수 있습니다.
-
실행결과 예시
스켈레톤 코드 설명
- calculator.scala: 사용자에게 수식을 입력받아 다음과 같은 결과를 출력하는 파일입니다.
- 실행 결과(올바른 구문): 인터프리터 형식으로 ‘exit’ 를 입력하기 전까지 반복 수행
- 실행 결과(틀린 구문): 틀린 구문 입력시 Syntax error를 출력. ‘exit’ 입력하기 전까지 반복 수행
- 실행 결과(올바른 구문): 인터프리터 형식으로 ‘exit’ 를 입력하기 전까지 반복 수행
- tokenizer.scala: 사용자에게 받은 입력에 대해 어휘 분석(lexical analysis or scanning)을 수행하는 코드입니다.
- 어휘 분석의 결과로 식별자(identifier), 숫자(number), 기호(symbol) 세 가지 중 하나로 사용자가 입력한 명령을 구분합니다.
- object TestTokenizer 를 통해 어휘 분석기를 테스트해 볼 수 있습니다.
- Note: 숫자에 해당하는 코드는 구현하셔야 합니다.
- 실행 결과
- token.scala: 각 Token의 타입을 나타내는 열거형 상수 Enumeration과 Token class, object가 구현되어 있습니다.