[프로그래밍 언어론][프로그래밍 언어론] 프로그래밍 언어론 정리
*원*
다운로드
장바구니
소개글
프로그래밍 언어론의 전체에 걸친 요약정리로 거의 책 한권을 요약하고 그에 따른 관련 기술등을 첨부한 자료로 프로그래밍 언어론 시간에 냈었던 모든 자료를 요약한 내용. 웬만한 소프트웨어 기술이나 언어론에 관한 자료는 다 있음.목차
서론 – 프로그래밍 언어를 배우는 이유본론
1. 언어의 구분
1.1 syntax
1.1.1 언어 생성기와 언어 인식기
1.1.2 구문 기술의 형식적 방법
1.2 Semantics
1.2.1 동적의미론
1.2.2 연산의미론과 표기의미론
1.2.3 공리 의미론에서의 전조건과 후조건
1.2.4 변수와 관한 기본적인 의미론의 고려사항.
1.2.5 Variables
1.2.6 The Concept of Binding
1.2.7 Storage Binding and Lifetime
1.2.8 실행파일의 구조
1.2.9 Type Checking
1.2.10 Strong Typing
1.2.11 Type Compatibility
1.2.12 Scope
1.2.13 Scope and Lifetime
1.2.14 Referencing Environments
1.2.15 Named Constants
1.2.16 Variable Initialization
1.2.17 레지스터의 종류
2. Primitive Data Types
2.1 Primitive Data Types
2.1.1 Numeric Types
2.2 User-Define ordinal Types
2.2.1 Enumeration Types
2.2.2 부분 범위 타입
2.2.3 Implementation of User-Defined Ordinal Types
2.3 Array Types
2.3.1 Arrays and Index
2.3.2 Subscript Bindings and Array Categories
2.3.3 Array Initialization
2.3.4 Array Operations
2.3.5 Rectangular and Jagged Arrays
2.3.6 Slices
2.3.7 Implementation of Array Types
2.4 연상 배열
2.4.1 Structure and Operations
2.4.2 Implementing Associative Array
2.5 Record Types
2.5.1 Definitions of Records
2.5.2 Refernces to Record Fields
2.5.3 Operations on Records
2.5.4 Evaluation
2.5.5 Implementation of Record Types
2.6 Union Types
2.6.1 Design Issues
2.6.2 Discriminated versus Free Union
2.6.3 Ada Union Types
2.6.4 Implementation of Union Types집합 타입의 구현
2.7 Pointer and Reference Types
2.7.1 Design Issues
2.7.2 Pointer Operations
2.7.3 Pointer Problems
2.7.4 Pointers in Ada
2.7.5 Pointer in C and C++
2.7.6 Pointer if Fortran 95
2.7.7 Reference Types
2.7.8 Evaluation
2.7.9 Implementation of Pointer and Reference Types
2.7.10 Paging 기법
2.7.11 Java Event Handler & Listener
2.7.12 CWnd 클래스
3 Expressions and Assignment Statements
3.1 Arithmetic Expressions
3.1.1 Operator Evaluation Order
3.1.2 Operand Evaluation Order
3.2 Overloaded Operators
3.3 Type Conversions
3.3.1 Coercion in Expressions
3.3.2 Explicit Type Conversion
3.3.3 Errors in Expressions
3.4 Relational and Boolean Expressions
3.4.1 Relational Expressions
3.4.2 Boolean Expressions
3.5 Short-Circuit Evaluation
3.6 Assignment Statements
3.6.1 Simple Assignments
3.6.2 Conditional Targets
3.6.3 Compound Assignment Operators
3.6.4 Unary Assignment Operators
3.6.5 Assignment as an Expression
3.6.6 Mixed-mode Assignment
3.7 Mixed-mode Assignment
4 Statement-Level Control Structures
4.1 Compound Statement
4.2 Selection Statements
4.2.1 Two-Way Selection Statements
4.2.2 Multiple Selection Constructs
4.3 Iterative Statements
4.3.1 Counter-Controlled Loops
4.3.2 Logically Controlled Loops
4.3.3 User-Located Loop Control Mechanisms
4.3.4 Iteration Based on Data Structures
4.4 Unconditional Branching
4.4.1 Problems with Unconditional Branching
4.5 Guarded Commands
4.6 Conclusions
5 Subprograms
5.1 Fundamentals of Subprograms
5.1.1 General Subprogram Characteristics
5.1.2 Basic Definitions
5.1.3 Parameters
5.1.4 Procedures and Functions
5.2 Design Issues for Subprograms
5.3 Local Referencing Environments
5.4 Parameter-Passing Methods
5.4.1 Semantics Models of Parameter Passing
5.4.2 Implementation Models of Parameter Passing
5.4.3 Parameter-Passing Methods of the Major Languages
5.4.4 Type-Checking Parameters
5.4.5 Implementing Parameter-Passing Methods
5.4.6 Multidimensional Arrays as Parameters
5.4.7 Design Considerations
5.4.8 Examples of Parameter Passing
5.5 Parameters That Are Subprogram Names
5.6 Overloaded Subprograms
5.7 Generic Subprograms
5.8 Design Issues for Functions
5.9 User-Defined Overloaded Operators
5.10 Coroutines
5.11 스레드
5.12 프로세스 스케줄링
6 Implementing Subprograms
6.1 The General Semantics of Calls and Returns
6.2 Implementing “Simple” Subprograms
6.3 Implementing Subprograms with Stack-Dynamic Local Variables
6.3.1 More Complex Activation Records
6.3.2 An Example Without Recursion
6.3.3 Recursion
6.4 Nested Subprograms
6.4.1 The Basics
6.4.2 Static Chains
6.4.3 Displays
6.5 Blocks
6.6 Implementing Dynamic Scoping
6.6.1 Deep Access
6.6.2 Shallow Access
6.7 Process
6.8 Quality
7 Evolution of the Major Programming Languages
7.1 Zuse’s Plankalkül
7.2 Minimal Hardware Programming: Pseudocodes
7.2.1 Short Code
7.2.2 Speedcoding
7.2.3 The UNIVAC “Complilng” System
7.2.4 Related Work
7.3 IBM 704와 FORTRAN
7.3.1 Historical Background
7.3.2 Design Process
7.3.3 FORTRAN Overview
7.4 Functional Programming: LISP
7.4.1 The Beginnings of Artificial Intelligence and List Processing
7.4.2 LISP Design Process
7.4.3 Language Overview
7.5 The First Step Toward Sophistication : ALGOL 60
7.6 Computerizing Business Records: COBOL
7.7 The Beginnings of Timesharing : BASIC
7.8 Everything for Everybody : PL/I
7.9 Two Early Dynamic Languages : APL and SNOBOL
7.10 The Beginnings of Data Abstraction : SUMULA 67
7.11 Orthogonal Design : ALGOL 68
7.12 Some Early Descendants of the ALGOLs
7.12.1 Simplicity by Design : Pascal
7.12.2 A Portable Systems Language : C
7.12.3 Other Early ALGOL Descendants
7.13 Programming Based on Logic : Prolog
7.14 History’s Largest Design Effort : Ada
7.15 Object-Oriented Programming : Smalltalk
7.16 Combining Imperative and Object-Oriented Features : C
7.17 An Imperative-Based Object-Oriented Language : JAVA
7.18 Scripting Languages for the Web : JavaScript and PHP
7.19 A New Language for the New Millennium : C
결론
본문내용
사람은 생각이나 개념을 전달하기 위해서 언어라는 도구를 사용한다. 또한 언어라는 도구는 사람이 기계에 명령을 내릴 때에도 사용된다. 특히 기계가 컴퓨터일 때 우리는 이 도구를 프로그래밍 언어라 한다. 프로그래밍 언어는 컴퓨터 출현 이전에도 존재하였다. 물론 이는 계산하는 기계를 위한 언어였다.프로그래밍 언어의 역사를 살펴보면 프로그래밍 즉 소프트웨어 도구의 역사를 알 수 있다. 그렇다고 프로그래밍 언어는 단순히 역사가 아니라 지금도 활발히 연구되고 발전하고 있는 분야이다. 프로그래밍 언어의 발전은 또한 소프트웨어의 설계 및 구현에 많은 영향을 주었고 앞으로도 줄 것이다. 따라서 우리는 발전하는 소프트웨어와 앞으로 발전할 소프트웨어를 위해서 컴퓨터공학과 학생으로서 프로그래밍 언어를 공부해야 할 이유이다.또한 프로그래밍 언어를 공부하면 얻어지는 이익들도 많다. 그것은 다음과 같다.
1) 생각을 표현할 수 있는 능력의 향상 – 사람이 생각할 수 있는 능력은 그 생각을 전달하는 데 사용되는 언어의 표현력에 의해서 영향을 받는다. 자연 언어에 대한 이해가 부족한 사람은 복잡한 사고를 표현하는 데 있어서, 특히 추상화의 깊이에 있어서 제한을 받는다 따라서 프로그래밍 언어를 배우면 언어를 표현할 수 있는 능력이 향상되는 것이다. .
2) 적합한 언어를 선택할 수 있는 배경이 향상된다. – 프로그래머가 현재 사용중인 다른 언어들을 잘 알고, 특히 이러한 언어의 특별한 특징을 잘 알고 있다면, 언어를 선택하는 데 있어서 더 나은 배경을 갖게 된다.
3) 새로운 언어를 배울 수 있는 능력이 향상된다. – 일단 언어의 기본적인 개념을 완벽하게 이해하고 나면, 배우고 있는 언어의 설계에 이러한 개념들이 어떻게 수용되어 있는지 훨씬 쉽게 알 수 있다.
4) 구현의 중요성에 대해서 보다 많이 이해한다. – 프로그래밍 언어 구문의 선택과 그 결과를 이해함으로써 보다 나은 프로그래머가 될 수 있다.
5) 새로운 언어를 설계할 수 있는 능력이 향상된다 – 프로그래밍 언어의 철저한 검토하는 복잡한 소프트웨어를 설계하는 데 도움을 주며, 사용자가 그러한 소프트웨어 제품을 검토하고 평가하는데 도움을 줄 것이다.
6) 전반적으로 전자계산 분야의 이해가 향상된다
꼭 그렇다고 이러한 이득을 위해서 공부해야만 하는 것은 아니지만 이것들 만으로도 공부해야만 하는 이유는 충분하다고 할 수 있다.
프로그래밍 언어는 과학응용분야, 사무응용분야, 인공지능 분야, 시스템 프로그래밍, 스크립트언어, 특정 목적 언어 등의 방법으로 사용되고 있다. 이것은 다르게 말하자면 많은 분야에서 프로그래밍언어를 사용한다고 할 수 있다.
이러한 프로그래밍 언어를 평가하는 기준이 있다. 이 평가는 어떠한 작업을 할 경우 가장 적합한 프로그래밍 언어를 선택하기 위해서 필요한 것이다. 그 기준은 다음과 같다.