Tuesday, October 14, 2014

CS205 Лаб 4: Зарлагдсан хувьсагч таних нь

Зорилго:

  • Соорс кодноос зарлагдсан хувьсагчуудыг илрүүлж сурах

Тайлбар:
  • Тухайн токенг төрлийнх эсэхийг шалгадаг is_type() функцийг бичих хэрэгтэй
  • Зарлагаа нь дараах бүтэцтэй байна гэж тооцоолж кодоо бичих хэрэгтэй --> Type Identifier { , Identifier }; Жишээ нь:
    • float f;
    • int i, k;
    • char c;
  • Тухайн нэг зарлагааг боловсруулах declaration() гэдэг функцийг бич.
  • Зарлагааг агуулах Declaration гэдэг класс бичиж холбогдох кодуудыг нь бич.
  • Энэхүү зарлагааг таниж боловсруулах код нь өмнөх лаб дээр хийсэн Parser класс дотор байршина.

Псевдо код:

class Declaration:
  variable_name
  value

  function __baiguulagch__(var, val):
    this.variable_name = var
    this.value = val
  
  function to_string():
    print "Variable: ", this.variable_name
    print "Type: ", this.value


class Parser:
  ...
  List declarations
  
  function process_declarations():
    while this.is_type() and this.current_token is not EOF:
      this.declaration()
      this.current_token = this.lexer.next_token()
    
  function is_type():
    if this.current_token is int or bool or char or float:
      return true
    else:
      return false
  
  function match(Token tok):
    value = this.current_token.value
    if this.current_token.type equals tok.type:
      this.current_token = this.lexer.next_token()
    else:
      print "Буруу токен байна"
      print "Хүсч буй токен нь: ", tok.type
      print "Файлаас уншсан токен нь: ", this.current_token.type
      print "Би явлаа баяртай, битгий араас дуудаарай"
      system.exit(1)
    return value
    
      
  function declaration():
    dec_type = this.current_token.value
    while this.current_token is not semicolon:
      this.current_token = this.lexer.next_token()
      Token identifier_tok = Token("identifier", "")
      variable_name = this.match(identifier_tok)
      this.declarations.append(Declaration(variable_name, dec_type))
      while this.current_token is comma:
        this.current_token = this.lexer.next_token()
        var_name = this.match(new Token("identifier", ""))
        this.declarations.append(Declarations(var_name, dec_type))
    this.match(semicolon_token)
    
  function print_declarations():
    for dec in this.declarations:
      dec.to_string()

main():
  ...
  parser.lexer.set_file("cs205lab4.cpp")
  parser.process_headers()
  parser.match(left_brace)
  parser.process_declarations()
  parser.match(right_brace)
  parser.print_declarations()
  print "алдаа заасангүй, би лаб 4 -өө хийчлээ"
  print "lab4 дуусав."   
     

cs205lab4.cpp:
int main()
{
  float f;
  int i, k;
  char c;
}

Хугацаа: 
  • VII долоо хоног
Багш: Ч. Эрдэнэбат
2014-10-14

No comments:

Post a Comment