본문 바로가기

반응형

백과사전

중지계산 (short-circuit evaluation) Bool 식의 값을 왼쪽에서 오른쪽으로 계산하는 도중 나머지 부분을 계산하지 않아도 식의 값이 결정되는 경우 더 이상 그 식의 나머지 부분을 계산하지 않고 값을 결정하는 기능 더보기
모호성 (Ambiguity), 모호한 문법 (Ambiguous Grammer) 모호한 문법(Ambiguous Grammer) 동일한 문자열에 대하여 상이한 분석나무가 나타날 수 있는 문법 모호한 문법은 모호하지 않은 동등한 문법으로 바꿀 수 있으나, 모든 경우에 그러하지는 않다. 모호성 제거 연산에 우선순위를 부여하거나 모호성 제거규칙을 만든다. 연산우선순위만으로는 모호하지 않은 문법을 만들 수 없고, 결합법칙(associativity)을 사용함 결합법칙(associativity) 연산자의 우선순위가 같은 경우에 왼쪽에서 오른쪽으로 계산할지(좌측결합,left associative), 오른쪽에서 왼쪽으로 계산(우측결합,right associative)할지를 결정하는 규칙. 하나의 context-free언어를 생성하는 모든 문법이 모호하다면, 이 언어를 본질적으로 모호하다(inhere.. 더보기
교착상태(Deadlock) 1. 교착상태를 설명하기 위한 시스템 개념(모델) - 시스템은 제한된 개수의 자원으로 구성 - 프로세스는 자원을 경쟁적으로 사용 2. 정상상태에서의 프로세스 자원 사용 순서 (1) 요구 (2) 사용 (3) 해제(반납) 3. 교착상태가 존재하기 위한 4가지 조건 (1971년 E. G. Coffman의 논문에 최초 언급되어서 Coffman조건이라고도 알려져 있음) (1) 상호배제조건(mutual exclusion) 한 프로세스가 자원을 사용하고 있을 때, 다른 프로세스는 기다려야 함 (2) 대기조건(wait for) 프로세스가 다른 자원을 기다리면서, 이미 자신에게 할당된 자원은 해제하지 않고 점유하고 있음 (3) 비중단조건(no preemption) 자원 사용이 끝나기 전에 중도에 비자발적으로 해제될 수 .. 더보기
LEX - LEX는 1975년 Bell 연구소의 Lesk와 Schmidt에 의해서 개발 - Lex는 사용자가 정의한 정규표현과 수행코드를 입력으로 받아, 일반 범용언어인 C로 쓰여진 프로그램을 출력 - 출력된 C 프로그램은 입력문자열에서 정규표현에 해당하는 토큰을 찾았을 때, 그에 결합된 수행코드를 수행한다. LEX의 입력 세 부분 정의부분(Definition Part) %% 변환규칙부분(translation rules part) %% 사용자 부프로그램부분(user subprograms part)각 부분은 생략될 수 있으며 %%에 의해 구분 정의부분 - 이름과 일련의 표현식들로 구성 - 이름은 적당한 식별자이고 표현식은 이름에 해당하는 정규표현이다. 변환규칙 부분 - 표현식들과 일련의 수행코드들로 구성되며 표현.. 더보기
어휘 분석 ( lexical analysis ) 어휘 분석(Lexical Analysis) - 원시 프로그램을 읽어서 토큰(token, 의미있는 문법단위)으로 분리하는 작업 토큰(token) - 의미있는 문법적 단위. 식별자/상수/예약어/연산자/구분자 등 어휘 분석기 설계(순서) 1. 정규문법이 주어져야 함 2. 주어진 문법에 대한 토큰표 작성 3. NFA작성 4. NFA->DFA변환 5. DFA최적화 어휘 분석기 구현 - 문법이 어떻게 주어지는지 명확하게 정의 - 토큰 사용빈도를 확률개념으로 분석해야 함 - 구문분석과 어휘 분석의 선후관계 결정 - 구현방법 예 : 프로그래밍 언어를 이용하여 직접 구현하거나 자동화도구 사용 어휘분석기 생성기 - 컴파일러 생성기 또는 컴파일러-컴파일러의 일부분 - 어휘분석기를 자동생성하는 도구 LEX, FLEX, Sca.. 더보기
범위 (Scope) 실체(변수,레이블의 속성)가 그 이름(변수이름,프로시저이름,레이블이름)으로 유효하게 사용(이름으로 접근 가능)될 수 있는 프로그램의 영역. Ada에서처럼 정의하는 방법에 따라서는 범위와 가시성을 별개로 구분할 수도 있다. 블록 ALGOL60에서 최초 제시된 개념. 특정 변수가 어떤 문맥 속에서 의미를 가지는 범위. 블록구조 언어 : 블록 안에 또 다른 블록이 포함되는 것을 허용하는 언어 경계 : 부호 또는 예약어를 사용하여 지정함 변수 사용 범위 : 지역변수 : 자기 블록에서 선언된 변수 비지역변수 : 상위 블록에서 선언된 것이지만 자기 블록에서 쓸 수 있는 변수 전역변수 : 제일 바깥 쪽 블록에서 선언되어 모든 블록에서 쓸 수 있는 변수 장점 : 블록 내에서는 변수명을 자유롭게 사용할 수 있게 됨. 프.. 더보기
참조 환경과 기호 상수 (referencing environment and symbolic constant) 참조 환경(referencing environment) 명령문에서 접근할 수 있는 모든 이름(변수 이름, 프로시저 이름, 레이블 이름)들의 집합 (1) 정적 범위 규칙 언어의 참조 환경 - 지역환경 : 지역변수로 구성됨 - 비지역환경 : 비지역 변수로 구성됨 - 컴파일시 피연산자나 자료구조의 주소를 결정 (2) 동적 범위 규칙 언어의 참조 환경 - 지역환경과 활성 상태 블록 변수로 구성됨 기호 상수(symbolic constant) 모양은 변수이지만 실제로는 상수임 (1) 정적 기호상수 - 실행 이전에 값이 바인딩 됨 - 컴파일시 실제 값이 대체되며, 기억장소가 할당되지 않는 특징 - Pascal, C, Modula-2 (2) 동적 기호상수 - 실행 시의 계산된 값 바인딩 - 기억장소 할당 필요 - Ad.. 더보기
기억장소와 생명시간 (memory and lifetime) 기억장소 할당 - 변수의 값을 기억시킬 기억장소를 할당(allocation)하면 변수의 메모리 위치가 바인딩됨 - 변수의 필요성이 없어지면 할당된 기억장소가 반납됨 생명 시간(lifetime) - 변수의 값과 기억장소가 바인딩되어 있는 시간간격 - 생명시간에 따른 변수 분류 : 정적변수, 스택변수, 명시적 히프변수, 묵시적 히프변수 1. 정적 변수(static variable) 기억장소가 실행 이전에 바인딩되어 실행종료까지 계속되는 변수이며, 실행시간 전체에 걸친 생명시간을 가진다. 해당 단위 프로그램이 실행중이 아닌 동안에도 바인딩이 유지됨. C/C++, Java에서는 static을 지역변수의 선언 앞에 붙이면 정적 변수로 선언된다. 전역 변수도 정적 변수로 볼 수 있다 (1) 장점 프로그램 실행중 기.. 더보기

반응형