Computer Science/프로그래밍 언어론

정규 문법의 연산 순서 정규 문법의 연산자 우선순위와 연산 과정을 살펴보자 핵심 개념 정규식의 연산자 우선 순위는 정규식을 평가할 때 작업 순서를 명확히 하기 위해 정의됩니다. 다음은 정규 표현식 연산자와 그 우선 순위입니다 Kleene Star (*): 이 연산자는 우선 순위가 가장 높습니다. 바로 앞의 정규 표현식이 0개 이상 발생함을 나타냅니다. "r"이 정규식인 경우 "r*"는 0개 이상의 “r” 항목과 일치합니다. 연결(.): 두 번째로 높은 우선 순위는 연결 연산자입니다. 두 개의 정규식 "r"과 "s"를 하나로 결합합니다. 여기서 “r” 바로 뒤에 "s"가 옵니다. 즉, "r"과 "s"가 정규 표현식인 경우 "r.s"는 두 부분으로 분해될 수 있는 모든 문자열과 일치합니다. 여기서 첫 번째 ..
프로그래밍 언어론 - 선언 블록 영역 선언은 변수에 이름과 데이터 타입 등의 속성을 부여하는 문장이다 선언의 종류 명시적 선언 : 선언문을 사용하여 변수 이름을 나열하고, 이들 속성에 부여하는 방법 예약어 int를 사용하여 변수 x의 데이터 유형을 명시적으로 지정합니다. 예: int x; 묵시적 선언 : 실행 시간 중에 일어나거나 프로그램 실행 과정에서 변경 되는 바인딩 FORTRAN은 변수 이름이 선언문 없이 사용되면 선언된 것으로 간주합니다. 일반적으로 변수 이름이 ‘I’, ‘J’, ‘K’, ‘L’, ‘M’ 또는 'N’으로 시작하면 정수 유형으로 간주됩니다. 그렇지 않으면 실제 유형으로 간주됩니다. 블록 일련의 문장 집합으로 자체적인 선언을 가질 수 있는 프로그램 단편 영역 이름의 사용이 허락되고 있..
프로그래밍 언어론 - 바인딩 바인딩: 속성을 이름과 연결하는 프로세스 결속시간에 따른 결속분류 int x; // Statically bind the type 'integer' to the name x int* ptr = new int; // Dynamically bind the allocated storage to y 세분화 된 바인딩 시간 언어 정의 시 바인딩(defining-time): 언어 키워드 및 구문 규칙을 정의합니다. 변환기를 구현할 때 만든 바인딩(구현 시간): 언어 구성을 기계 명령어 또는 이에 상응하는 저수준 표현과 연결합니다. 메모리 레이아웃 및 데이터 구조를 정의합니다. 소스 프로그램을 번역할 때 만들어진 바인딩(번역 시간): 외부 기호 및 함수에 대한 참조를 해결합니다. 변수 및 ..
프로그래밍 언어론 - 변수 변수는 이름, 주소, 값, 타입, 영역, 속성들이 모여서 변수의 개념이 형성된다. 이름(식별자, identifier) : 프로그램에서 어떤 개체를 식별하기 위해서 사용되는 문자 스트링 예약어(reserved word)는 이름으로 사용될 수 없음 미리 정의된 이름(predefined name)은 미리 정의된 의미를 갖고 있음 사용자에 의해 다시 정의되어 사용될 수 있음 주소 : 변수의 값이 저장될 메모리 주소 값 : 변수의 주소에 저장된 내용 변수의 값은 배정문에 의해 부여 int x = 5; // 'x' is an l-value, as it can be assigned a value int y = x + 2; // 'x + 2' is an r-value, as it is a t..
고차 함수 고차 함수(Higher-order function)란 다른 함수를 인자로 받거나, 함수를 반환하는 함수를 의미합니다. 고차 함수는 함수형 프로그래밍에서 핵심적인 개념 중 하나로, 함수를 이용한 추상화를 가능하게 합니다. 고차 함수를 사용하면 코드를 간결하게 작성할 수 있고, 코드의 재사용성이 높아집니다. 일급 객체(First-class citizen)란 프로그래밍 언어에서 어떤 값이나 객체가 다음과 같은 조건을 충족할 때를 말합니다: 변수에 할당될 수 있다. 함수의 인자로 전달될 수 있다. 함수의 반환값으로 사용될 수 있다. 자료 구조에 저장될 수 있다. 함수형 프로그래밍 언어에서는 함수를 일급 객체로 취급합니다. 이 말은 함수를 변수에 할당하거나, 다른 함수의 인자로 전달하거나, 반환값으로 ..
익명 함수 익명 함수(anonymous function)는 이름이 없는 함수를 의미합니다. 일반적으로 함수를 정의할 때, 함수의 이름을 지정하여 참조하거나 호출할 수 있지만, 익명 함수는 이름이 없기 때문에 일회성으로 사용되거나 다른 함수에 인자로 전달됩니다. 익명 함수는 함수형 프로그래밍(Functional Programming Language)에서 주로 사용되지만, 몇몇 명령형 언어(Imperative Programming Language)에서도 사용 가능합니다. 함수형 언어는 함수를 일급 객체(First-class citizen)로 취급하여, 함수를 변수에 할당하거나 다른 함수의 인자로 전달할 수 있습니다. 익명 함수의 주요 장점은 다음과 같습니다. 코드의 간결성: 이름이 없기 때문에 코드를 간결하..
람다 대수 베타 축약 람다 대수의 베타 축약(Beta-reduction)은 람다 대수에서 함수 적용을 수행하는 과정입니다. 함수와 인자를 결합하여 하나의 표현식으로 줄이는 과정으로, 계산의 기본 단위를 나타냅니다. 베타 축약은 람다 대수의 핵심 연산으로, 프로그램의 실행을 모델링하는 방법을 제공합니다. 베타 축약은 다음과 같은 기본 규칙을 따릅니다. (λx. E1) E2 → E1[x := E2] 이 규칙은 함수 (λx. E1)에 인자 E2를 적용하면 결과 표현식 E1[x := E2]가 생성된다는 것을 의미합니다. 여기서 E1[x := E2]는 표현식 E1에서 매개변수 x가 출현하는 모든 부분을 E2로 치환한 결과입니다. 실습 (λx. x + 1) 2 베타 축약을 적용하면 다음과 같이 계산할 수 있습니다...
프로그래밍 언어란 프로그래밍 언어 동작시키는 프로그램을 작성하기 위한 인공적인 언어 프로그래밍 언어의 분류 저급 언어 : 기계어, [[어셈블리어]] 하드웨어 지향의 기계 중심 언어 고급 언어 : C, C++, Java 등 대부분의 언어 컴퓨터 기종에 따라 다르게 표현 되는 저급 언어 문제 해결 사람이 사용하는 기호 체계와 유사
논리형 언어 논리형 언어는 기호 논리 형태의 규칙과 사실을 정의하는 방식으로 동작하는 프로그래밍 언어입니다. 선언형 프로그래밍 패러다임을 따르며, 주어진 사실과 규칙을 기반으로 새로운 사실을 유추하거나 질의를 수행합니다. 논리형 언어가 필요해진 이유는 명령형 언어의 기계 친화적인 특성 때문에 프로그래머가 더 사람 친화적이고 추상화된 언어를 원하기 시작했기 때문입니다. 논리형 언어를 사용하면 미리 관계 규칙을 선언하고 값을 입력하면 답이 나오는 구조로 동작하게 됩니다. 예를 들어, "저는 전남대 교수입니다."라는 사실을 선언한 후, 규칙들을 서술하고, 규칙이 맞는지 확인하면서 프로그램을 작성할 수 있습니다. 예시 저는 전남대 교수입니다. 규칙들을 서술해서, 규칙이 맞아? 이게 맞아? 했을 때? 미리 관계 ..
프로그래밍 패러다임 : 계산의 본질을 보는 관점에 따른 분류 지금까지 공부한 순서를 보면 전개 과정이 보입니다. 처음엔 프로그래밍 언어란에서 고급 언어와 저급 언어를 분류하였습니다. 프로그래밍 언어 설계 원칙에서 언어가 가지는 속성을 알게 되었습니다. 이를 토대로, 만들어진 언어가 어떻게 처리 되었는지 [[프로그램 처리 기법]]에서 보았죠 이번 시간에는 그렇다면, 프로그램 생성과 처리 단계도 알았고, 언어가 가지는 속성도 알았으니 프로그래밍 언어의 패러다임에 대해 알아봅시다 즉 언어 자체의 패턴을 보는 것입니다 제가 흔히 쓰는 언어는 명령형 언어인데, 왜 다른 패러다임으로 전환을 시도하는가, 어떤게 필요했을까에 대해 고민한 흔적이 보이니 조금은 더 즐겁게 공부 할 수 있었던거 같습니다 명령형 언어 논리형..
berom
'Computer Science/프로그래밍 언어론' 카테고리의 글 목록 (3 Page)