프로그래밍언어론(원유헌)1-7정리
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

본문내용

결정됨. 일반적인 명령형 언어에서 지수 연산자는 우 결합 법칙이 적용되고 다른 모든 연산자는 좌 결합 법칙이 적용된다. Java에서 같은 순위를 갖는 연산자가 여러 개 나타날 때 왼쪽에서 오른쪽으로 계산해 가는 좌측 결합(left associativity)과 오른쪽에서 왼쪽으로 계산해 가는 우측 결합(right associativity)이 있다. 대부분의 연산자는 식에서 먼저 나타난 순서대로 계산하는 좌측 결합을 만족하나 우측결합을 만족하는 연산자도 여러 개 있다. 우측 결합을 하는 연산자는 그 의미에 주의해서 프로그램을 작성해야 한다
5.19
피연산자 : 식의 변수는 메모리로부터 값을 인출함으로써 평가됨, 괄호로 둘러싸인 경우, 식의 값이 피연산자로 사용되기 전에 이 식에 포함됨 모든 연산자들이 먼저 평가되어야 함
함수의 부작용 : 함수가 자신의 매개변수나 전역 변수를 변경시킬 때 발생, 피연산자 평가 순서에 따른 문제 해결책, 언어 설계자는 단순히 함수적 부작용을 허용하지 않음으로써 함수 평가가 식의 값에 영향을 미치는 것을 허용하지 않고, 식에 포함된 연산자들이 특정 순서로 평가되어야 한다는 것을 언어 정의에 포함 시키고 언어 구현자들이 이러한 순서를 보장할 것을 요구함
5.20
컴파일러가 논리의 참/거짓 여부를 판단할 때, 앞의 조건에서 참(or연산시)이나 거짓(and연산시)이 판별되면 뒤의 조건은 판별되지 않는 기법을 말한다.
C를 예로 들면, A||B에서 A가 참이면 B는 판별하지 않고, A&&B에서 A가 거짓이면 B는 판별하지 않는다. 따라서, or 연산시에는 참일 가능성이 높은 조건을 앞에, and 연산시에는 거짓일 가능성이 높은 조건을 앞에 두는게 효율적이다.
5.25
C++ : 배열과 같이 길이가 고정된 데이터 구조를 훑어갈 때 for문을 사용한다. 초기화문은 선언 또는 수식이어야 한다. 일반적으로 하나 또는 여러개의 변수를 선언하여 초기화하거나 이미 선언된 변수에 값을 대입하는 수식으로 이루어진다. 초기화문은 비어있을수 있다.
java : for문에서 지정한 횟수만큼 이 문장 안에 존재하는 문장을 반복 실행하는 반복문 구조이다. 초기화문은 반복 실행을 제어변수 및 그 외 변수를 초기화하는 부분으로 오직 한번만 실행된다.
6.3
동일한 특성을 갖는 객체들을 하나의 집합으로 묶어 리스트로 제공한다. 이는 다수의 동형 자료들이 있을 때, 이것들을 읽고, 쓰기 쉽게 해준다. 또한, 상수 초기값 배정에 유용하다. C/C++에서는 열거형을 switch문등에 사용함으로서, 편리함을 얻는다.
6.8
시작주소: base, 원소의크기: size라 했을 때, 3차원배열(A[i][j][k]) 계산법
ub1, ub2, ub3는 각 첨자의 상한, lb1, lb2, lb3는 각 첨자의 하한을 의미한다.
☞ 행우선방법(Row major order)
address of A[i][j][k] =
base + [ { (i-lb1) * (ub2-lb2+1) + (j-lb2) } * (ub3-lb3+1) +(k-lb3) ] * size
예) int형 A[0..3][0..3][0..3]( or A[4][4][4]) 에서 A[1][2][3]의 원소의 주소
base + [ { (1-0) * (3-0+1) + (2-0) } * (3-0+1) + (3-0) ] * 4 = base+108
☞ 열우선방법(Column major order)
address of A[i][j][k] =
base + [ { (k-lb3) * (ub2-lb2+1) + (j-lb2) } * (ub1-lb1+1) +(i-lb1) ] * size
예) int형 A[0..3][0..3][0..3]( or A[4][4][4]) 에서 A[1][2][3]의 원소의 주소
base + [ { (3-0) * (3-0+1) + (2-0) } * (3-0+1) + (1-0) ] * 4 = base+228
6.11
설계시 고려사항: 1. 포인터 변수의 영역과 존속기간
2. 힙변수의 종속기간은 얼마인가?
3. 포인터가 가리키고자 하는 객체의 자료형에 대한 제한유무
4. 포인터가 동적메모리관리, 간접 주소지정을 위해서 사용되는가?
5. 언어가 포인터형, 참초형, 혹은 둘 다 지원하는가?
문제점: 1. 여러 포인터 변수가 동일한 객체를 가리킬 수 있는데, 이들은 그 객체의 동일 지점 또는 다른 지점을 가리킬 수 있다. 이때 프로그래머가 한 포인터를 사용하여 그 객체를 소멸시키거나 내용을 변경시키면 프로그램의 어려움이 발생될 수 있다.
2. 어떤 포인터 변수가 가리키고 있지 않은 객체가 존재할 수 있다. 프로그램에서 이런 객체는 명시적인 이름이 없기 때문에 이 객체를 접근할 수 있는 방법이 없다. 이는 결국 기억장소만 차지하는 꼴이 된다.
6.13
장점: 포인터는 기억장소를 가리키지만, 참조는 객체를 가리킨다. 그러므로 참조의 산술 연산은 의미가 없으며, 따라서 오류를 초래하기 쉬운 포인터 산술연산과 같은 경우를 제거한다.
C++참조변수와의 차이점:
C++포인터는 메모리 주소를 참조하는 반면, Java 참조 변수는 클래스 인스턴스를 참조한다. 이것은 직접적으로 참조 변수에 대한 산술 연산이 의미를 갖는 것을 막는다. 또한, 다른 클래스의 사례를 참조하도록 배정이 가능하다. Java 클래스 인스턴스들은 묵시적으로 명시적인 기억장소 회수 연산자가 없어 회수되기 때문에 허상 참조가 발생될 수 없다.
6.17
7.4
정적영역 규칙은 식별자의 사용 영역을 블록의 정적 내포관계로 결정하는 것으로 컴파일러 언어가 이에 해당되며, 동적영역 규칙은 식별자의 영역이 실행시간에 확정이 되어 실행순서에 의해 사용영역이 결정되는 것으로 인터프리터언어가 이에 해당된다.
구분
정적영역
동적영역
장점
블록의 내/외부에 변수가 선언되기 때문에, 변수선택이 단순하고 구현에 용이 하다. 또한, 번역시 프로그램 문장만을 조사하여 변수의 정의된 상태를 결정하기 때문에 실행시간이 빠르다.
변수를 사용함에 있어 유연함이 있다.
단점
영역 구멍이라고 하는 변칙현상이 발생한다. 유연성이 적다.
블록 프로그램이 호출된 순서에 따라 영역이 한정된다. 실행시간이 느려진다.
7.9
7.11
  • 가격2,000
  • 페이지수17페이지
  • 등록일2010.02.24
  • 저작시기2007.12
  • 파일형식한글(hwp)
  • 자료번호#585062
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니