== ì „ë°˜ì ì¸ ì»´íŒŒì¼ëŸ¬ ë™ìž‘ ê³¼ì • == * 컴파ì¼ëŸ¬ì˜ ë™ìž‘ì€ í¬ê²Œ front end, back end로 나뉜다. * front end : 컴파ì¼ëŸ¬ê°€ 여러 ì¢…ë¥˜ì˜ ì–¸ì–´(C, Java, python 등등)를 ìž…ë ¥ìœ¼ë¡œ 받아서 ì´ë¥¼ í•˜ë‚˜ì˜ í†µì¼ëœ IR (Intermediate Representation)으로 만들어주는 ìž‘ì—…ì„ ìˆ˜í–‰í•˜ëŠ” 부분. 컴파ì¼ëŸ¬ë¡ ì—서 주로 다루는 ë¶€ë¶„ì´ front endì— í•´ë‹¹í•˜ëŠ” 부분임. 컴파ì¼ëŸ¬ë§ˆë‹¤ ìƒì„±í•˜ëŠ” IRì˜ ë°©ì‹ì´ 다름(GCC : ASTs, LLVM : SSA 등). * back end : front endì—서 ìƒì„±í•œ IRì„ ì´ìš©í•´ 타겟 플랫í¼(ARM, x86등)ì— ë§žëŠ” ë¨¸ì‹ ì½”ë“œë¥¼ ìƒì„±í•˜ëŠ” 부분. 컴퓨터 구조나 OS와 ê´€ë ¨ëœ ë¶€ë¶„ì´ ë§ŽìŒ. {{{ source code -> lexical analysis : scanner (token ìƒì„±) -> syntax analysis : parser (abstract syntax tree ìƒì„±) -> semantic analysis (decorated AST ìƒì„±) -> intermediate code generator (IR, intermediate representation ìƒì„±) -> ////////////// 여기까지 front end. ì´ ì•„ëž˜ë¡œ back end code optimizer -> code generator (targetì—서 실행ë 코드 마지막으로 ìƒì„±. ë¨¸ì‹ ì½”ë“œ) }}} * scanner ì´í•´ì— 필요한 것 : RE (regular expression ì •ê·œí‘œí˜„ì‹) * scanner, parser ì´í•´ì— 필요한 것 : CFG (Context-Free Grammar) * RE, CFG ì´í•´ì— 필요한 것 : Automata == finite state machine == == 수ì‹ë³€í™˜ê¸° BNF == * 바로 C언어를 ìž…ë ¥ìœ¼ë¡œ 받는 ë¶€ë¶„ì„ êµ¬í˜„í•˜ëŠ” 것보다 NFA -> DFA -> ì½”ë“œë¡œì˜ ë³€í™˜ ê³¼ì •ì„ ë³´ê¸° 위해 수ì‹ì„ ìž…ë ¥ìœ¼ë¡œ 받아 AST를 ìƒì„±í•˜ëŠ” 변환기를 구현해보는 것부터 시작.