Tuesday, October 7, 2014

CS205 Лаб 3: Токен зөв эсэхийг шалгах нь

Зорилго:

  • Токен зөв эсэхийг шалгагч парсер бүтээх

Тайлбар:
  • Лаб 2 дээрээ хийсэн кодон дээрээ суурилж хөгжүүлнэ.
  • Нэмж Parser нэртэй класс зохион байгуулна.
  • Parser класс нь дотроо лаб 2 дээр хийсэн Lexer классын объектыг бүрдмэл байдлаар агуулна. Мөн current_token гэх гишүүн өгөгдөлтэй байна. Уг current_token нь яг одоо боловсруулж буй токенг агуулна. this.current_token = this.lexer.next_token()
  • Parser класс нь өөртөө match буюу тулгалт хийх гишүүн функцтэй байна. Уг функц нь одоогийн боловсруулж буй токенг ямар нэг өгөгдсөн токентой шалгана. Хэрэв зөв бол next_token функцийг дуудаж current_token гишүүн хувьсагчаа шинэчилнэ. Хэрэв таарахгүй бол алдаа заагаад програм хаагдах ёстой. 
  • Боловсруулах Си хэлний код нь include энэ тэр байхгүй шууд main функцаасаа эхлэх ба их бие нь хоосон байна. 
  • Тэгээд лаб 3 -ын main код дээрээ токенуудын зөв дараалал бүхий жагсаалт (Token төрлийн объект агуулах массив гэж ойлгож болно) үүсгээд тэрхүү дараалалтайгаа файлаас уншиж буй Си хэлний соорс кодыг шалгана. Буруу бол алдаа өгөөд хаагдах ёстой. Бүх токен зөв дараалалтай байвал амжилттай боллоо гэсэн утга хэвлээд төгсөнө. 

Псевдо код:

import lab2.Lexer
import lab2.Token

class Parser():
  Token current_token
  Lexer lexer
  function __baiguulagch__(Lexer lex):
    this.lexer = lex
    this.current_token = this.lexer.next_token()

  function match(Token tok):
    if this.current_token.value == tok.value:
      this.current_token = this.lexer.next_token()
    else:
      print "Буруу токен байна"
      print "Хүсч буй токен нь: ", tok.value
      print "Файлаас уншсан токен нь: ", this.current_token.value
      exit(1)
  
main():
  Lexer lex
  lex.set_file("cs205lab3.cpp")
  Parser parser(lex)
  
  int_tok = Token("keyword", "int")
  main_tok = Token("keyword", "main")
  left_paren_tok = Token("left_paren", "(")
  right_paren_tok = Token("right_paren", ")")
  left_brace = Token("left_brace", "{")
  right_brace = Token("right_brace", "}")
  
  headers = []
  headers.append(int_tok)
  headers.append(main_tok)
  headers.append(left_paren_tok)
  headers.append(right_paren_tok)
  
  for head in headers:
    parser.match(head)

  parser.match(left_brace)
  parser.match(right_brace)
  
  print "Аз жаргалтай төгсгөл"


cs205lab3.cpp:

int main()
{
}


Хугацаа:
  • VI долоо хоног

Багш: Ч. Эрдэнэбат
2014-10-7

No comments:

Post a Comment