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

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

Friday, September 26, 2014

CS205 Лаб 2: Лексер бүтээх

Зорилго:

  • Өөрийн мэддэг хэл дээрээ Си дээр бичигдсэн соорс кодыг уншиж токенуудын дараалал болгон задлах лексер бүтээх


Тайлбар:

  • Өөрийн мэддэг ямар нэг хэл дээрээ хийнэ. Заавал жава, пайтон гэхгүй. 
  • Си хэл дээр 10 мөр бүхий код бичиж файл руу хадгалах
  • Хийж буй лексертээ регуляр экспрешн ашиглаж болох газруудад нь ашиглах хэрэгтэй. Юм болгонд нь регялур экспрешн ашиглах гээд өөрсдийгөө хүндрүүлэх хэрэггүй. Дор хаяж 1-2 удаа ашиглах боломж олдоно.
  • Токен нэртэй класс зарлаж холбогдох кодуудыг бичнэ. Уг класс нь төрөл ба утга гэсэн хоёр гишүүн өгөгдөлтэй байна. Мөн дэлгэцэнд хэвлэх зориулалт бүхий гишүүн функцтэй (Жава: to_string, Пайтон: __str__, __repr__)
  • Лексер нь next_char() гэсэн функцтэй байна. Уг функц нь нэг удаа дуудагдахдаа нэг л char утга буцаана. Иймд аль мөрний аль багана дээр яваа гэдгээ санах үүднээс мөр ба багана гэсэн гишүүн хувьсагч зарлаарай. Дахин дуудагдах үед мөр ба багана гишүүн хувьсагчаа ашиглаад өмнө нь байсан байрлалаасаа үргэлжлүүлж дараагийн char утгаа буцаана. 
  • Лексер класс нь өөртөө next_token() гэдэг нэртэй гишүүн функцтэй байна. Уг функц нь next_char() функцийг дуудан буцаагдсан char утга дээр шалгалт хийж харгалзах токенг нь буцаана. Өөрөөр хэлбэл нэг удаад дуудахад нэг л токен буцаана.
  • main функцдээ төгсгөлгүй давталт хэрэгжүүлж тэрхүү давталт дотроо lexer.next_token() функцийг дуудна. next_char() функц нь файлын төгсгөлд ирэнгүүт тусгай ямар нэг тэмдэгтийг буцаана. next_token() нь тэрхүү тусгай тэмдэгтийг гараад ирэнгүүт EOF гэсэн токенг буцаана. 
  • EOF токен гараад ирэнгүүт нөгөө төгсгөлгүй давталтаасаа break хийгээд гарна. 


Псевдо код:
class Token:
  type
  value
  function to_string():
    print "TokenType: ", this.type, 
          ", Value", this.value

class Lexer:
  current_line
  current_column
  eof_value: "@"
  keywords = ['int', 'main', 'void', 'while', ... ]
  function next_char(self):
    if not end_of_file:
      if current_column >= len(current_line):
        current_line ++
        current_column = 0
      ch = read_char_value(this.current_line, 
                            this, current_column)
      current_column ++
      return ch
    else:
      return self.eof_value
  
  function concat_chars():
    word = ''
    while true:
      ch = this.next_char()
      if ch is letter or digit:
        word += ch
      else:
        break
    return word  
    
  function next_token():
    ch = this.next_char()
    if ch == "+":
      Token tok
      tok.type = "PLUS"
      tok.value = ch
      return tok
    elif ch is letter:
      word = concat_chars()
      if word in keywords:
        return Token("keyword", word)
      else:
        return Token("identifier", word)
    elif ch == "="
      ch = this.next_char()
      if ch == "=":
        return Token("equals", "==")
      else
        return Token("assign", "=")
    elif ch == "@":
      return Token("EOF", "@")
    ... 

main():
  Lexer lex
  lex.set_file("cs205.cpp")
  tok = lexer.next_token()
  print tok.to_string()
  while tok.type is not "EOF":
    tok = lexer.next_token()
    print tok.to_string()
  print "Файлын төгсгөлд хүртэл бүх токенуудыг задлаж дууслаа"
        
Дээрх код нь аль нэг хэлд хамааралгүй зөвхөн үндсэн санааг олгох үүднээс бичигдсэн псевдо код шүү. Хуулж тавиад ажиллуулах гээд үзвэл алдаа заана шүү :)
Дээр псевдо кодноос санаа аваад өөрийн мэддэг хэл дээрээ лексерын кодыг бич.

Хугацаа:
   IV долоо хоног

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

CS205 Лаб 1: Регуляр экспрешн ашиглах нь

Зорилго: 

  • Регуляр экспрешн ашиглаж сурах


Зорилт:

  • Өөрийн мэддэг хэл дээрээ регуляр экспрешн хэрхэн хэрэгжүүлдэг талаар судлах
  • Дор хаяж 4-5 регуляр экспрешн ашигласан жишээ код бичиж үзүүлэх


Судлах материал:

  • Жава хэл дээрх регуляр экспрешний хичээл [линк]
  • Пайтон хэл дээрх регуляр экспрешний хичээл [линк]
  • C# хэлний регуляр экспрешний хичээл [линк]
  • regular expression in {таны мэддэг хэл} гээд гүүглээс хайгаад гарсан хичээлүүдийг үзэж танилцаарай.

Хугацаа: 
  • II долоо хоног
Багш: Ч. Эрдэнэбат
2014-9-26

CS205 Програмчлалын хэлний зарчмууд

Лабууд:
Лаб 1: Регуляр экспрешн ашиглах нь [линк]
Лаб 2: Лексер бүтээх [линк]
Лаб 3: Токен зөв эсэхийг шалгах нь [линк]

Friday, May 9, 2014

Сигнатурт тулгуурласан сүлжээний халдлага илрүүлэх систем хөгжүүлэх нь

Authors: Б. Пүрэв-Очир, Ч. Эрдэнэбат

Abstract: Судалгааны ажлын хүрээнд хөгжүүлсэн систем нь тухайн хост дээр хяналт хийх бөгөөд сигнатурт тулгуурласан илрүүлэлтийн аргачлал ашиглах замаар халдлагыг илрүүлнэ. Систем нь тодорхой тооны сигнатурын сантай ба програмчлалын Си хэл болон түүний libpcap тусгай санг ашигласан болно.

Keywords: signature; ids; packet; pattern;

Conference: Монголын Мэдээллийн Технологи 2014: Эмбэдэд систем ба түүний хэрэглээ ЭШХ

Pages: 141-144
Date: 2014-May-5
City: Улаанбаатар
Country: Монгол
Publisher: МУШУТИС
ISBN: 978-99973-46-74-2

Full Text: [PDF]

Б. Пүрэв-Очир, Ч. Эрдэнэбат, “Сигнатурт тулгуурласан сүлжээний халдлага илрүүлэх систем хөгжүүлэх нь,” in Монголын Мэдээллийн Технологи 2014: Эмбэдэд систем ба түүний хэрэглээ ЭШХ, 2014, pp. 141–144.

Түвшний нэвтрэлтэд суурилсан хайлтын системийн аалзны тоог сонгох нь

Authors: П. Мөнхцэцэг, Ч. Эрдэнэбат

Abstract: Дэлхийн өндөр хөгжилтэй орнуудын дийлэнх нь өөрсдийн гэсэн үндэсний хайлтын системтэй байдаг. Энэ нь тухайн орны хувьд, иргэдийн хувийн мэдээлэл, үндэсний аюулгүй байдал зэрэг олон талаараа чухал ач холбогдолтой байдаг. Энэхүү өгүүллийн зорилго нь түвшний нэвтрэлтийн алгоритм ашиглан зөвхөн монгол домэйнуудаас мэдээллээ цуглуулж, түүнийгээ санах ойн хувьд үр ашигтай байхаар индексжүүлэн хадгалах үндэсний хайлтын системийн аалзны тоог сонгоход чиглэгдэж байгаа юм. Туршилтын үр дүнд түвшний нэвтрэлтийн алгоритмын дагуу 2 – 4 аалзыг трийд байдлаар ажиллуулснаар өгөгдсөн хугацаанд илүү олон хуудсанд хэсэлт хийж байгаа нь ажиглагдсан. 

Keywords: search engine; spider; breadth-first; inverted index; term; document; posting

Conference: Монголын Мэдээллийн Технологи 2014: Эмбэдэд систем ба түүний хэрэглээ ЭШХ

Pages: 216-220
Date: 2014-May-5
City: Улаанбаатар
Country: Монгол
Publisher: МУШУТИС
ISBN: 978-99973-46-74-2

Full Text: [PDF]

П. Мөнхцэцэг, Ч. Эрдэнэбат, “Түвшний нэвтрэлтэд суурилсан хайлтын системийн аалзны тоог сонгох нь,” in Монголын Мэдээллийн Технологи 2014: Эмбэдэд систем ба түүний хэрэглээ ЭШХ, 2014, pp. 216–220.

Monday, April 28, 2014

Үндэсний хайлтын системийн зохиомж болон хэрэгжүүлэлт


Authors: П. Мөнхцэцэг, Ч. Эрдэнэбат

Conference: Мэдээлэл харилцааны технологи ба боловсрол ЭШБХ

Abstract: Дэлхийн өндөр хөгжилтэй орнуудын дийлэнх нь өөрсдийн гэсэн үндэсний хайлтын системтэй байдаг. Энэ нь тухайн орны хувьд, иргэдийн хувийн мэдээлэл, үндэсний мэдээллийн аюулгүй байдал зэрэг олон талаараа чухал ач холбогдолтой байдаг. Энэхүү өгүүллээр дамжуулан пайтон програмчлалын хэл ашиглан энгийн үндэсний хайлтын системийг танилцуулах болно.

Keywords: breadth-first; crawling; inverted index; search engine
Pages: 22-25
City: Улаанбаатар
Country: Монгол
Date: 2014-April-24
Publisher: МУБИС, КМТС

Full Text: [PDF]

П. Мөнхцэцэг, Ч. Эрдэнэбат, “Үндэсний хайлтын системийн зохиомж болон хэрэгжүүлэлт,” in Мэдээлэл харилцааны технологи ба боловсрол ЭШБХ, 2014, pp. 22–25. 

Sunday, April 20, 2014

Дайзан төхөөрөмж: Програм хамгаалалтын электрон цоож

Ч. Эрдэнэбат, Дайзан төхөөрөмж: Програм хамгаалалтын электрон цоож. Улаанбаатар, Монгол: BCI, 2009, p. 117.

Keywords: донгл; драйвер кодчлол; микроконтроллёр; параллел интерфейс; програмын хамгаалалт

Publisher: BCI

Editors: С. Байгалтөгс

ISBN: 99929-56-70-4

Монгол дахь цахим мэдээллийн аюулгүй байдал: эмзэг тал, эрсдэл бэрхшээл, шийдэх арга зам

М. Батсэргэлэн, О. Энхбат, Ч. Эрдэнэбат, “Монгол дахь цахим мэдээллийн аюулгүй байдал: эмзэг тал, эрсдэл бэрхшээл, шийдэх арга зам,” in Монголын Мэдээллийн Технологи 2013: Цахим засаглал, мэдээллийн технологи ЭШХ, 2013, pp. 69–73.

Abstract: Монгол дахь цахим мэдээллийн аюулгүй байдал, түүний “хөндүүр цэг” (эмзэг сул тал, тодорхой зарим нүх цоорхой), тохиож буй болон болзошгүй аюул занал .. холбогдох жишээ баримт, шийдвэрлэх арга замын талаар энд товч өгүүлэв. Ялангуяа технологийн угшилтай эмзэг байдлыг хэрхэн оновчтой хамгаалах, эрсдлийг бууруулахад шаардлагатай тохируулга, арга техникийн талаар мөн дурдсан. Сэдвийн агуулгын хүрээнд, дотоодын мэдээлэл технологийн компаниудын сүлжээ, сервер, вэбүүдэд хийсэн шалгалт шинжлэлийн зарим үр дүнг тоймлон харуулсан болно.

Publisher: ММТК

Full Text: [PDF]