컴파일러
-
ELF(executable and linking format)컴파일러/코드 생성 2013. 8. 3. 00:38
프로그램 헤더(program header; 로더) 정보로 처리하면 세그먼트의 집합으로 보이고, 섹션 헤더(section header; 어셈블러나 링커) 정보로 처리하면 섹션의 집합으로 보인다. 세그먼트는 1개 이상의 섹션으로 구성된다.c.f. ELF 헤더 재배치 가능 파일(relocatable file)어셈블러(GNU as)가 생성하는 오브젝트 파일프로그램 헤더가 없으므로 그대로 실행할 수 없다c.f. 링크 입력 모듈에서 정의되어 있는 global symbol일반 함수와 전역 변수입력 모듈에서 참조하는 하고 있지만 다른 곳에 정의된 global symbolextern으로 선언된 함수와 변수입력 모듈에서 정의되어 해당 모듈에서만 배타적으로 참조할 수 있는 local symbol정적 함수와 정적 변수 gcc..
-
-
JavaCC컴파일러/중간 표현 2013. 7. 25. 12:56
단계적으로 기계어에 가까운 표현모두 점프문(jump statement)제어 구조연산자에 부호모두 포인터구조체배열포인터 트리 구조중간 표현 노드 three-address codeQuadruple 문장(Stmt)의 리스트 Assign -> StmtCJump -> Stmt.cond() // ExprJump -> Stmt.label()Return -> Stmt.expr()LabelStmt -> Stmt.label()Expr(식).type().asmValue() // ImmediateValueUni -> Expre.g. .. notl %eax .expr()Bin -> Expre.g. .. push %eax .. pop %ecx .. addl %ecx, %eax .op().left() // Expr.right() ..
-
JavaCC컴파일러/의미 해석 2013. 7. 22. 01:38
semantic analysis the maintenance of symbol tables (also called environments) mapping identifiers to their types and locationsAs the declarations of types, variables, and functions are processed, these identifiers are bound to “meanings” in the symbol tables. When uses (nondefining occurrences) of identifiers are found, they are looked up in the symbol tables. scopevisibility스택 local variable 변수..
-
JavaCC컴파일러/파서 2013. 7. 16. 18:49
여러 개의 단어구문 단위c.f. 구문 트리비종료 기호(nonterminal symbol) 선택 충돌(choice conflict) EBNF(Extended Backus-Naur Form) 선언(declaration) 정의(definition)함수 정의변수 정의정수 정의구조체 정의공용체 정의typedef문장(statement)식(expression)항(term) compilation_unit() : {}{import_stmts() top_defs() } imports_stmts() : {}{(import_stmt())*} import_stmt() : {}{ name() ("." name())* ";"} top_defs() : {}{ ( LOOKAHEAD(storage() typeref() "(") defu..
-
JavaCC컴파일러/스캐너 2013. 7. 16. 18:47
단어(토큰)종료 기호(terminal symbol) 정규 표현 * 토큰을 생성하지 않는 단어SKIP directiveSPECIAL_TOKEN directive 공백문자행 주석 * 특수 문자e.g. "==" * 일반 단어TOKEN directive 예약어식별자숫자 리터럴 * 구조를 포함한 단어MORE directive 블록 주석문자열 리터럴문자 리터럴SPECIAL_TOKEN : { } SPECIAL_TOKEN : { } MORE : { : IN_BLOCK_COMMENT } MORE : { } SPECIAL_TOKEN : { : DEFAULT } TOKEN : {| | | | | | | | | | | | | | | | | | | | | | | | | | | } TOKEN : {..
-
JavaCC컴파일러 2013. 7. 16. 02:03
options {STATIC = false;} PARSER_BEGIN(Adder) import java.io.*; class Adder {static public long evaluate(String src) throws ParseException {Reader reader = new StringReader(src);return new Adder(reader).expr();} static public void main(String[] args) {for (String arg : args) {try {System.out.println(evaluate(arg));} catch(ParseException ex) {System.err.println(ex.getMessage());}}} } PARSER_END(A..