U E D R , A S I H C RSS

New Compile Error/2014_05_10

전반적인 컴파일러 동작 과정

  • 컴파일러의 동작은 크게 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를 생성하는 변환기를 구현해보는 것부터 시작.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:50
Processing time 0.0100 sec