Computer Science

Symbol Table symbol들에 대한 정보를 관리/운영하는데에 사용되는 자료구조를 symbol table이라고 한다. 심벌 테이블은 컴파일러에서 어휘,구문,의미를 분석하는데에서 각 명칭들의 정보를 얻고, 사용이 타당한지 검사하는데에 사용되고, 코드 생성 단계에서 명칭의 속성들을 이용해 올바른 코드를 생성할 수 있도록 한다.
형식 언어 컴파일러를 만들기 위해서는 언어에 대한 이해가 선행되어야 한다는 것을 지난 장에서 살펴보았다. 언어에 대해서 잘 이해하고, 체계적으로 전개하기 위해서는 "잘 정의된 언어"가 어떤것인지 알아야 한다. 이처럼 잘 정의된 언어를 형식 언어라고 부른다. 형식언어는 보통 문장의 집합으로 정의된다. 2장에서는 언어를 형식적으로 정의하고, 언어를 표현하는 방법으로 사용되는 문법을 정의한다. 형식 언어의 기본 개념 형식언어는 문장들의 집합으로 정의된다. Alphabet 알파벳은 문장을 이루는 기본 심볼(기호)들의 유한 집합이다. 형식언어이론에서는 알파벳이 보통 소문자 a, b, c... 과 같은 심벌들을 사용한다. String (sentence, word) 알파벳 T에 대한 스트링은 알파벳 T에 속하는 심벌..
데이터베이스 데이터베이스는 조직에 필요한 정보를 얻기 위해서 논리적으로 연관된 데이터들을 모아 구조적으로 통합해둔 것을 말한다. 즉 데이터베이스는 여러사람이 공용으로 사용하기 위해서 통합하고, 저장한 운영 데이터의 집합을 말한다. 데이터베이스 시스템(DBMS) 데이터베이스 시스템은 각 조직에서 사용하던 데이터를 통합하고 공유할 때 생기는 장점을 이용하는 시스템이다. 데이터베이스 시스템은 아래 세가지로 구성된다. DBMS: 사용자와 데이터베이스를 연결하는 소프트웨어 데이터베이스: 데이터를 모아둔 집합 데이터모델: 데이터 저장 기법 관용적으로 데이터베이스 시스템을 DBMS라 표현하기도 한다. 정보 처리 기술의 발전 현재까지 정보 처리 기술의 발정 양상 예시를 살펴보자. 시기 단계 정보통신 기술 특징 1970..
컴파일러를 만든다면 한땀한땀...직접 코드를 넣어야 하는걸까? N개의 언어를 사용할 수 있고, M개의 컴퓨터에서 동작하게 하려면 우리는 NxM개의 컴파일러를 작성해야 한다. 완전 무리..! 하지만 우리에게는 컴파일러 자동화 도구, 컴파일러 생성기가 있습니다. (컴파일러의 컴파일러) 컴파일러 생성기는 컴파일러의 전 과정이나 각 단계를 자동 생성하는 도구들을 말한다. 컴파일러 생성기 컴파일러 생성기는 목적 기계에 대한 기계 표현을 입력으로 받아서 하나의 컴파일러를 출력하게 된다. 이렇게 출력된 컴파일러는 소스 프로그램을 입력으로 받아 목적 기계의 코드로 번역하는 컴파일러이다. Lexical Analyser Generator 어휘 분석기 생성기는 어휘분석기를 자동생성하는 도구이다. 토큰에 대한 표현을 입력으로..
컴파일러는 고급 언어로 쓰인 프로그램을 어떤 특정 컴퓨터에서 직접 실행이 가능한 형태의 프로그램으로 번역해주는 컴퓨터 프로그램이다. 일반 컴파일러 구조 컴파일러의 일반적인 구조는 다음과 같이 생겼다. 크게 프론트 앤드와 백앤드로 나눌 수 있다 프론트앤드: 소스 언어에 의존하는 부분으로, 소스 프로그램을 분석하고, 중간 코드를 생성한다. 백엔드: 목적 기계에 의존하는 부분으로, 중간 코드를 특정 기계를 위한 목적 코드로 번역한다. 프론트앤드 프론트앤드는 언어에 의존하므로, 각 언어마다 하나씩 필요하다. 기계에 비하면 언어의 문법이 명확히 정의되어있기 때문에 프론트앤드는 잘 정립되어있는 부분이다. 프론트앤드의 기능에 대해 살펴보자면, 프론트앤드의 역할은 소스 프로그램을 읽어들이고, 어휘분석, 구문 분석을 통..
번역기 번역기란 하나의 프로그래밍 언어로 작성된 프로그램을 입력으로 받아 동등한 의미를 갖는 다른 프로그래밍 언어로 된 프로그램을 출력하는 시스템 프로그램을 말한다. 여기서 입력되는 프로그램을 소스 프로그램이라 하고, 출력되는 프로그램을 목적 프로그램(목적 언어로 작성된)이라 한다. 번역기의 종류 번역기는 입력과 출력 프로그램에 따라 여러 종류로 나뉘게 된다. Preprocessor 프리프로세서의 경우 #include같은 지시문이 있는 경우 이를 처리해 확장된 프로그램을 출력한다. 따라서 이 경우에는 소스와 목적 프로그램의 언어가 모두 고급 언어가 된다. 여기서 "확장"은 매크로 처리 기능, 조건부 컴파일 기능(Conditional Compile), 헤더파일이 포함된 파일 포함 기능(File includ..
우리는 혼자서 프로젝트를 통해 소프트웨어 개발을 할 수도 있지만, 사실상 대부분 팀 단위의 프로젝트를 수행한다. 팀 단위로 여러명의 개발자가 소프트웨어를 개발하게 되면, 혼자 프로젝트를 개발할 때 보다 더 많은 사항들을 고려하고, 계획하고, 관리해야한다. 이번 포스팅에서는 프로젝트의 계획에 대한 부분을 알아보도록 하자. Project Planning 프로젝트 계획은팀원들과 고객이 소통할 때와프로젝트의 진행상황을 평가하는데에 사용한다. 프로젝트의 계획에는 다음과 같은 작업이 포함된다. 작업을 여러 부분으로 나누어 프로젝트 팀 구성원에게 할당 발생할 수 있는 문제를 예상하고 해결방안을 준비 Planning stages 언제 project planning을 해야할까? 프로젝트의 계획은 초기에 한번만 세우고 끝..
소프트웨어 정의 프로그램, 프로그램과 관련된 문서들, 라이브러리, 지원 웹사이트와 프로그램을 유용하게 쓰는데에 필요한 환경설정 데이터를 모두 포함하여 소프트웨어라고 한다. 유형 소프트웨어 제품은 목적에 따라서 두가지 유형으로 분류하여 생각할 수 있다. 일반 제품(Generic product) 독립형 시스템. 어떤 고객이든 원하면 살 수 있도록 판매된다. 이때, 특정 분야에 특화괸 마켓을 위한 소프트웨어또한 포함된다. 맞춤식 제품(Customized porduct) 특정 고객을 위해서 고객에 맞추어 개발하는 시스템 좋은 소프트웨어 좋은 소프트웨어가 되기 위해서 소프트웨어는 어떤 요건을 만족해야할까? 유지보수성 소프트웨어는 고객의 변화하는 요구를 충족시켜야 한다 확실성과 보안성 소프트웨어의 신뢰성, 보안성과..
mingyung
'Computer Science' 카테고리의 글 목록