Scala 프로그래밍 과제 5

   

  • 이번 과제는 프로그래밍 언어의 어휘 분석기(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’ 로 저장하여 이루리 과제 게시판에 업로드해주세요.
  • 제출기한 : 5월 28일 금요일 11:59pm

       

과제 진행 시 어려운 점이 있으면 이루리 게시판을 이용해 질문하세요. 게시판을 통해 하기 어려운 질문이라면 아래 조교님들의 이메일을 통해 문의하시기 바랍니다.

   

조교: 최한준(95gkswns@naver.com), 김수현(tngus988207@gmail.com)

   


과제 설명

이번 과제는 Scala 언어를 사용하여 계산기를 구현하는 과제입니다.

   

1) 어휘 분석기에서 숫자를 인식하는 부분 구현
  • tokenizer.scala 파일의 아래 부분을 구현하세요.
    • Hint) Case 1, Case 3 참고

    assianment1_Tokenizer_number

   

2) 변수를 사용할 수 있는 계산기 구현
  • 주어진 코드를 실행한 후 명령 프롬프트에 명령을 입력했을 때 올바른 구문이면 수행 결과를 출력하고 잘못된 구문이면 구문 오류(syntax error)를 출력합니다.
  • 이 프로그램은 배정문과 수식, 이 두 가지 종류의 명령을 수행할 수 있습니다.
  • 배정문을 입력으로 받으면 기호표(symbol table)에 변수의 식별자와 이 변수가 갖는 값을 쌍으로 저장합니다.
  • 수식을 입력으로 받으면 수식을 평가하여 결과를 출력합니다.
    • 수식은 이미 정의된 변수의 식별자 또는 수를 포함할 수 있습니다.
  • 실행결과 예시

    assianment2_result

       

스켈레톤 코드 설명

   

  • calculator.scala: 사용자에게 수식을 입력받아 다음과 같은 결과를 출력하는 파일입니다.
    • 실행 결과(올바른 구문): 인터프리터 형식으로 ‘exit’ 를 입력하기 전까지 반복 수행 calculator_result
    • 실행 결과(틀린 구문): 틀린 구문 입력시 Syntax error를 출력. ‘exit’ 입력하기 전까지 반복 수행 calculator_wrong_result

 
 

  • tokenizer.scala: 사용자에게 받은 입력에 대해 어휘 분석(lexical analysis or scanning)을 수행하는 코드입니다.
    • 어휘 분석의 결과로 식별자(identifier), 숫자(number), 기호(symbol) 세 가지 중 하나로 사용자가 입력한 명령을 구분합니다.
    • object TestTokenizer 를 통해 어휘 분석기를 테스트해 볼 수 있습니다.
      • Note: 숫자에 해당하는 코드는 구현하셔야 합니다.
    • 실행 결과

    image-20210430180644185

   

  • token.scala: 각 Token의 타입을 나타내는 열거형 상수 Enumeration과 Token class, object가 구현되어 있습니다.