CS/프로그래밍언어론

CS/프로그래밍언어론

[프로그래밍언어론] 13. Subprograms

어떤 요소를 추상화하는 기본적인 개념이 2가지가 있다. 1. Process abstraction함수와 같이 어떤 기능(절차)의 추상화를 말한다. 2. Data abstraction객체지향 프로그래밍의 클래스같이 데이터를 하나로 추상화하는 것을 말한다. 이번 글에서는 process abstraction에 대해서 더 깊게 파보자. Subprogram서브프로그램은 말 그대로 프로그램을 구성하는 하위 프로그램이다.서브 프로그램은 반드시 맨 처음부터 시작한다. (중간부터 시작x)즉, 진입점이 하나밖에 없는 single entry point 를 가진다. 프로그램을 호출하는 프로그램을 caller, 호출당하는 프로그램을 callee 라고 한다.callee가 실행되는 동안에는 caller가 멈춰있고, callee가 실..

CS/프로그래밍언어론

[프로그래밍언어론] 12. Expression & Assignment Statements

Expression모든 프로그래밍 언어는 수식을 갖고 있을 수 밖에 없다. (프롤로그조차도 포함했으니)수식을 통해 계산한 결과 값을 assignment statement를 통해 변수에 저장한다. Arithmetic Expression수식 중에 제일 간단한 것은 산술 수식이다.산수식은 operator, operand, 괄호, 함수 호출로 구성된다. 대부분의 언어에서 이항연산자는 infix 지만, 일부 언어에서는 prefix 를 사용하기도 한다. (LISP)당연히 postfix를 사용하는 언어도 있다.. 연산자는 크게 단항(unary), 이항(binary), 삼항(ternary) 연산자로 구분된다.피연산자 개수가 12개가 될 수도 있고, 행렬이 될 수도 있고.. 언어마다 다양하다. Arithmetic Exp..

CS/프로그래밍언어론

[프로그래밍언어론] 11. Logic Programming Language (Prolog)

Logic Programming Language기호 논리(symbolic logic) 에 기반을 두고 있는 프로그래밍 언어다.논리적으로 맞는 답을 도출하는 것이 목표이다.논리를 선언하는 것에 신경을 쓰고 (Declarative) 그 도출과정은 신경쓰지 않는다. (procedural)(답이 뭐가 나와야 한다고만 할 뿐, 어떻게 내는지는 신경쓰지 않는다.) 논리형 프로그래밍 언어는 다음과 같은 것들로 구성된다. Proposition (명제)logical statement 로, 참 / 거짓으로 분류가 된다.오브젝트와 오브젝트 간 관계로 구성되어 있다. 오브젝트는 상수, 변수로 구성된다.상수는 오브젝트 자체를 나타내는 기호이다.변수는 명령형 언어의 변수보다, 함수형 언어의 변수에 가깝다. 다른 시점에 다른 오브..

CS/프로그래밍언어론

[프로그래밍언어론] 10. Data Type

명령형 언어는 변수가 중요하다.이때 변수는 6가지 속성을 가질 수 있었다.address, name, value, type, scope, lifetime 이다.이번 글에서는 이 중 type 에 대해 자세히 정리하려고 한다. Data Type데이터 오브젝트와, 그 오브젝트들에 대해 미리 정의된 연산들을 모은 collection을 정의한 것을 말한다.descriptor는 변수의 attributes 의 collection을 말한다.하나의 오브젝트는 사용자 정의 타입의 인스턴스를 나타낸다. 모든 데이터 타입에 대한 설계시 문제는 어떤 연산들을 정의해야 하는지, 그리고 이들의 동작을 어떻게 명시할 것인지가 중요하다.과연 이것이 필요한 데이터 타입인가, 어떤 오퍼레이션이 필요한가, 어떻게 이들을 정확하게 표시할 것인..

CS/프로그래밍언어론

[프로그래밍언어론] 9. 함수형 언어 (LISP)

함수형 언어함수형 언어에서 말하는 '함수'는 수학에서 말하는 '함수'를 가지고 프로그램을 만들어보자는 아이디이에서 시작되었다. 우리가 흔히 사용하는 C, C++ 과 같은 언어들은 모두 명령형 언어(imperative languages) 이다.명령형 언어들은 모두 폰 노이만 아키텍쳐에 직접적인 기반을 두고 있다.즉, 폰 노이만 구조를 어떻게 쉽게 사용할 지가 목표인 언어였다.쉽게 사용한다는 말은 효율성이 높다는 의미이다.효율성이 우선 고려사항이었기 때문에, 소프트웨어 개발에 대한 언어의 적합성을 고려하지 않았다. 함수형 언어(functional languages) 는 수학적 함수에 기반을 둔 언어로서, 프로그램이 실행되는 아키텍쳐가 아니라 사용자에게 더 친숙한 이론적 기반을 사용하는 것에 중점을 둔 언어이..

CS/프로그래밍언어론

[프로그래밍언어론] 8. Name & Binding

변수 (Variables)우리가 지금 고민하고 있는 언어는 명령형 언어이다.명령형 언어는 '프로세서'와 '메모리'로 구성된 폰 노이만 구조의 컴퓨터에서 실행된다.그리고 프로세스가 한 일의 결과는 메모리에 저장된다. 명령형 언어에서 메모리를 대표하는 것은 변수다.즉, 변수는 메모리 cell 에 대한 추상화이다. 변수 설계시 고려 요소와 특성변수를 설계할 때 고려하는 여러가지 요소가 있다.- 범위 (scope) : 프로그램 내에서 변수가 유효한 범위 (공간)- 수명 (lifetime) : 프로그램 내에서 변수가 유효한 시간, 범위와 수명은 항상 겹치지는 않는다.- 타입 (type) :변수 값의 범위와 사용 가능한 연산자의 집합을 결정한다.변수를 설계할 때는 타입을 확인하는 방법도 필요하다. (type che..

CS/프로그래밍언어론

[ Lex/Yacc ] 내가 만든 테스트케이스 (테스트 파일 포함)

테스트 파일아래 테스트 케이스를 일일히 입력으로 넣고 빼는 게 불편해서 테스트 케이스 파일과 스크립트를 작성했다.https://github.com/kckc0608/Programming-Language-HW/tree/main/HW2 Programming-Language-HW/HW2 at main · kckc0608/Programming-Language-HW프로그래밍 언어론 과제 레포. Contribute to kckc0608/Programming-Language-HW development by creating an account on GitHub.github.com위 레포지토리에 테스트 케이스 파일들을 저장하였다.A. Function함수 정의, 함수 사용 (내장 함수 포함) 횟수 카운팅함수가 전방 선언되고..

CS/프로그래밍언어론

[ lex / yacc ] error: 'AUTO' undeclared (first use in this function) 해결

hw3.l: In function ‘yylex’:hw3.l:14:9: error: ‘AUTO’ undeclared (first use in this function) 14 | "auto" {return(AUTO);} | ^~~~hw3.l:14:9: note: each undeclared identifier is reported only once for each function it appears in lex 에서 반환한 토큰 AUTO 가 yacc 파일에서 %token 으로 정의되지 않을 때 발생하는 에러이다. hw3.l: In function ‘yylex’:hw3.l:51:9: warning: returning ‘char *’ from a function with return..

CS/프로그래밍언어론

[프로그래밍언어론] 7. Parsing Problem

파서의 목표는 소스코드를 받아서 파싱을 한 뒤, Parse Tree 를 만드는 것이다.만약 파싱하다가 실패했다면 소스코드에서 문법에 맞지 않는 부분이 있었다는 뜻이므로,파서는 syntax error 가 발생했다는 걸 알려줘야 한다. 잘 동작하는 파서는 파싱할 때 토큰 1개를 더 앞서 볼 수 있다. (look ahead, LA)그래야 알맞는 BNF 문법을 체크할 수 있다. 파서에는 2가지 카테고리가 있다.첫번째는 탑-다운 / 두번째는 바텀-업 이다.탑 - 다운 파서탑-다운 파서는 root 부터 시작해서 아래로 내려가면서 파스 트리를 만든다.탑-다운 파서는 왼쪽에서부터 파고들어 본다. (즉 pre-order 순으로 파싱트리를 만든다.)xAα 라는 sentential form 이 주어..

CS/프로그래밍언어론

[프로그래밍언어론] 6. C언어의 BNF 문법과 파싱 예제

BNF 따라가기 BNF 문법은 나중에 YACC 라는 프로그램에 들어가 Parser 를 만든다. (야크는 파서 제너레이터이다.) 이번 글에서는 BNF 문법을 보고 주어진 C 코드를 파서가 어떻게 파싱하게 될 지 파싱트리를 그리는 과정을 직접해보고자 한다. 이 과정을 수행하려면 우선 lexical analyzer 에 의해 소스코드가 각각의 렉시컬 토큰 조각들로 구분이 되어있어야 한다. 소스코드에서 렉시컬 토큰을 추출하는 과정은 아래의 lex 코드를 참고하자. // 강의록에서 ANSI C grammer, Lex specification.pdf 에 있는 코드입니다. D [0-9] L [a-zA-Z_] H [a-fA-F0-9] E [Ee][+-]?{D}+ FS (f|F|l|L) IS (u|U|l|L)* %{ #i..

에버듀
'CS/프로그래밍언어론' 카테고리의 글 목록