🥕
TIL
  • [TIL] Studying tech / computer science knowledge
  • KeyMap
  • 알고리즘
    • 복잡도 계산 ( Computational Complexity )
    • DisjointSet-unionFind
    • Bellman-ford Algorithm
    • Dijkstra's Algorithm
    • DP ( Dynamic Programming , 동적 계획법 )
    • 플로이드-워셜 알고리즘 (Floyd-Warshall algorithm)
    • Kruskal's Algorithm
    • 최장 증가 수열 (Longes Increasing Subsequence)
    • Prim's Algorithm
    • 정렬
    • 시간복잡도 와 공간복잡도 ( Time Complexity & Space Complexity )
    • Topological Sort (위상 정렬)
  • 책 읽고난 후 요약
    • 프로그래밍 대회에서 배우는 알고리즘 문제해결 전략
    • cleancode
    • 도메인 주도 설계로 시작하는 마이크로서비스 개발
    • 오브젝트
  • CDC
    • debzium
    • kafka
  • 개발 상식
    • asciidoctor
    • 컴파일러
    • ELK 스택
    • 엔디안
    • git
    • Gitmoji
    • 테스트 종류
    • 라이브러리와 프레임워크
    • 정규 표현식
    • REST API
    • 동기와 비동기 / Blocking과 NonBlocking
    • Transaction Script와 Domain Model
    • 디자인 패턴
      • 행동 패턴
      • 객체 생성 패턴
        • 추상 팩토리 패턴
        • 빌더 패턴
        • 팩토리 메서드 패턴
        • [생성 패턴] 프로토 타입 (Prototype Parttern)
        • 싱글톤
      • 구조 패턴
        • 어댑터 패턴
        • 브릿지 패턴
        • 컴포짓(Composite) 패턴
        • 데코레이터
        • 프록시
    • refactoring
      • 중복 코드
      • 전역 데이터
      • 긴 함수
      • 긴 매개변수 목록
      • 가변 데이터
      • 이해하기 힘든 이름
  • 자료구조
    • AVL Tree
    • Splay Tree
    • aaTree
    • array-list
    • 자료구조 시간/공간 복잡도
    • 그래프
    • 힙
    • Red Black Tree
    • stack-queue
    • 트리 ( Tree )
  • DevOps
    • MSA
    • Kubernetes
      • AccessingAPI
      • controller
      • dashboard
      • kubernetes
      • object
      • pod
      • service
      • volume
  • Java
    • 어노테이션
    • 제어문
    • 데이터 타입
    • Enum
    • jvm
    • 연산자
    • thread
    • Java8
      • CompletableFuture
      • Date/Time
      • 어노테이션과 메타스페이스
      • 인터페이스
      • 람다식
      • Optional
      • 스트림
  • JavaScript
    • moduleProject
    • webpack-babel
    • 코어 자바스크립트
      • array
      • 함수 바인딩
      • 데코레이터와 포워딩
      • Class
      • 비교 연산자
      • Date 내장 객체
      • destructuring-assignment
      • function
      • 함수의 prototype 프로퍼티
      • 가비지 컬렉션 ( Garbage Collection )
      • JSON (JavaScript Object Notation)
      • map-set
      • 내장 프로토타입
      • new연산자와 생성자 함수
      • 객체
      • Object.keys, values, entries
      • 옵셔널 체이닝 '?.'
      • 프로퍼티 플래그
      • 프로퍼티 종류
      • 프로토 타입
      • 호출 스케줄링 ( scheduling a call )
      • scope
      • this
      • type-conversions
      • type
      • 함수의 자료형
      • var_let_const
  • Linux
    • 기본 명령어
    • 파일 종류
    • 리눅스
  • 네트워크
    • 응용 계층 ( Application Layer )
    • 오류 검출과 오류 정정
    • Http
    • Http Header
    • 컴퓨터 네트워크란
    • 네트워크 계층
    • 네트워크 제어 영역
    • 전송 계층 ( Transport Layer )
  • PHP
    • Facade
    • composer
    • scopeResolutionOperator
    • Laravel
      • SocialProvider
      • architecture
      • blade
      • controller
      • db
      • dbArchitecture
      • debug
      • eloquent
      • email
      • event
      • exceptionHandling
      • middleware
      • model
      • modelFactory
      • pagingLoading
      • queryBuilder
      • route
      • scout
      • seeding
      • tntsearch
      • validate
      • view
  • React
    • Next.js
    • React 란?
  • Spring
    • Controller
    • 요청이 들어왔을때 스프링이 처리하는 방법 ( 내부구조 )
    • ConfigurationProperties
    • Entity / DTO / VO
    • Maven
    • Repository와 DAO
    • 스프링 빈
    • Spring Framework
    • MVC 패턴
    • 도메인 입력값 검증
    • Spring Cloud
      • Spring Cloud
      • Eureka
    • Spring Data
      • JPA
      • JPA 어노테이션
      • 엔티티 비교
      • 복합 키와 식별 관계 매핑
      • JPA 예외처리
      • 객체지향 쿼리
      • EntityManagerFactory와 EntityManager
      • JPA 최적화
      • 프록시와 연관관계 맵핑
      • 연관관계
      • 상속관계 맵핑
      • 트랜잭션 범위와 영속성 컨텍스트
      • 데이터 타입
      • MySQL 연결
      • Pageable
    • Spring Project들과 library
      • Custom Serialize
      • Elasticsearch Index API
      • Spring HATEOAS
      • lombok (롬복)
      • Model Mapper
      • Object Mapper
      • Representation Model
      • Spring REST Docs
      • Spring Boot
    • Spring Security
      • Spring Security
      • Authentication
      • Authentication Filter
      • Authorization Filter
      • Filter Chain
      • SecurityContext
      • Spring OAuth2.0
    • Spring Test
      • AssertJ
      • Junit5
      • JunitParams
      • Mock Object
  • DataBase
    • ALIAS
    • CONCAT
    • CTE
    • Group By
    • HAVING
    • IFNULL
    • 인덱스
    • JOIN
    • ORDER BY
    • ROLLUP
    • SELECT
    • SELECT DISTINCT
    • SQL
    • WHERE
  • Web 상식
    • OAuth
    • WAS
    • HTTP통신 기반 인증
    • 브라우저
    • CSR 과 SSR
    • HTTPS
    • Web
Powered by GitBook
On this page
  • 좋은 프로그래밍언어의 조건
  • cross-compiler
  • Interpreter
  • Preprocessor
  • 컴파일러 구조
  • 컴파일러 자동화 도구
  • LEX
  • Parser Generator(PGS)
  • Automatic Code Generation
  1. 개발 상식

컴파일러

특정 프로그래밍 언어를 다른 언어로 바꿔주는 일종의 번역기 역할 (주로, 고차원의 원시 코드를 기계어로 번역하는데 사용한다.)

좋은 프로그래밍언어의 조건

  1. 언어의 개념이 명확 (Syntax : 문법 구조, semantics : 의미 )

  2. 개발자의 생각을 자연스럽게 표현 가능

  3. 호환성, 신뢰성, 모듈화, 효율성

  4. 확장성

cross-compiler

소스코드를 실제로 작성하고 실행한 기계 A가 아닌 다른 기계 B를 목표로하는 코드를 생성하는 컴파일러

Interpreter

원시코드를 전체 분석하는 컴파일러와 달리 소스코드 한줄한줄을 바로 바로 실행하는 것

Preprocessor

해석하자면 전처리기로 입력 데인터를 처리해 다른 프로그램의 입력으로 사용되는 출력을 만들어내는 프로그램.

여기서 전처리된 데이터를 Translator가 받아 목표로 하는 언어로 변경하게 된다.

컴파일러 구조

  • Front End : language에 독립적인 부분

    1. Lexical Analyzer : 어휘 분석기로 프로그래밍 언어를 컴파일러 내부에서 처리하기 쉬운 정수로 바꾸어주는 기능을 한다. Scanner역할

      ex. >/(와 같은 특수기호들을 7,25와 같이 미리 정의된 숫자로 바꾸는 역할로 이를 통해 성능향상을 꾀할 수 있다.

    2. Syntax Analyzer : 구문 분석기로 각 문장이 구문에 적합한지 분석하는 장치로 프로그램 구조를 Tree형태로 출력하고 문법이 틀리다면 에러를 출력한다.

      일종의 Parser역할

    3. Intermediate Code Generator : 위의 결과물인 트리형태 데이터를 이용해 유니코드를 생성

      여기서 의미(Sementic)체킹을 수행하고 유니코드 즉, 바이트코드로 변환을 해준다.

  • Back End : meachine 에 의존적인 부분

    1. Code Optimizer : 코드 최적화해주는 장치로 비효율적인 코드를 효율적인 코드로 바꾸어준다.

      • Meaning Optimization : 의미 최적화

        • major part : 실행 시간 증가

        • minor part : 코드 크기 감소

      • Criteria for optimization(최적화 기준)

        • 프로그램 의미 보존

        • 평균 속도 향상

      • Local Optimization

        • Constant folding : 상수 전파

        • Eliminating redundant load, store instructions : 중복 제거, 효율적인 저장 방법

        • Algebraic simplification : 대수적(큰 숫자) 간소화

        • Strength reduction : 강도 감소로 비용이 덜 드는 작업으로 대체

      • Global Optimization

        • Common subexpression : 공통 하위 표현식 제거 (동일한 표현식 있는지 검사후 이를 사용)

        • Moving loop invariants : 프로그램의 의미에 영향을 주지 않으면서 루프 본문 밖으로 이동할 수 있는 명령문을 수행

        • Removing unreachable codes : 사용하지 않은 코드(메모리) 제거 (ex. JS나 JAVA의 참조하지 않는 객체는 GC가 제거하는 것)

    2. Target Code Generator : 중간 코드를 이용해 기계 코드로 생성하는 장치

      • 임무

        1. 레지스터 관리

        2. storage 할당

        3. 코드 최적화 (기계에 종속적인 최적화)

        4. instruction(명령) 생성

    3. 추가) Error Recovery

      • Error Handling

        1. Error repair : error가 발생하면 복구 해주는 것

        2. Error detection : error 감지

        3. Error recovery : error가 다른 문장에 영향을 미치지 않도록 수적하는 것

        4. Error reporting

      • Error 종류

        1. Syntax Error

        2. Semantic Error

        3. Run-time Error

컴파일러 자동화 도구

기술이 발전할수록 언어와 기계는 다양해지는데 그때마다 컴파일러를 만들려면 NxM개의 컴파일러가 필요하기 때문에 컴파일러를 자동으로 만들어주는 Compiler-compiler가 필요하다.

LEX

1975년 M.E.Lesk가 고안

입력 스트림에서 정규표현으로 기술된 토큰들을 찾아내는 도구로 프로그램을 작성하는데 유용한 도구이다.

Parser Generator(PGS)

  1. Stanford PGS

    파스칼 언어로 작성됐고 구문 구조를 AST(Abstract Syntax Tree)형태로 얻고 이를 포함한 파싱 테이블을 출력한다.

  2. Wisconsin PGS 파스칼 언어로 작성됐고 error Recovery 기능이 있다.

  3. YACC(Yet Another Compiler Compiler) C언어로 작성됐고 UNIX에서 수행한다.

Automatic Code Generation

  • 3가지 목표

    1. Machine Description : ISP, ISPS, HDL ...

    2. Intermediate language

    3. Code Generating algorithm (CGA)

      • 패턴 일치 코드 생성

      • Table driven 코드 생성

PreviousasciidoctorNextELK 스택

Last updated 3 years ago