TYPE CHECKING



TYPE CHECKING

Kompiler harus memeriksa apakah source program mengikuti konvensi sintaksis atau semantik dari source languange. Pemeriksaan ini disebut Static Checking untuk meyakinkan bahwa kesalahan programming akan dideteksi dan dilaporkan.

Contoh static checking adalah :

1. Type checks

2. Flow-of-control checks

3. Uniqueness checks

4. Name-related checks

HAL-HAL PENTING

• Beberapa kompiler PASCAL mengga-bungkan static-checking dan interme-diate code generation dengan parsing

• Untuk bahasa yang konstruksinya kompleks, seperti Ada, type-checking biasanya dilakukan terpisah, antara parsing dan intermediate code generation

• Bahasa ADA secara eksplisit meng-ijinkan programmer untuk overload operator dimana sangat banyak bahasa lainnya yang overload operator aritmatika dengan type numerik yang berbeda (integer dan real)

• Constraint overload operator dicek dalam one-pass parser tidak meng-ijinkan terlalu banyak jenis untuk forward referensi simbol

• Pada Bahasa C dan Fortran dengan kemudahan yang dimilikinya, bahwa type checking tidak mungkin dalam one-pass parser

Posisi type checker dalam Kompiler :

Type Checker memeriksa apakah tipe dari suatu konstruksi cocok dengan konteksnya. Misalnya, built-in operator arithmetic mod dalam Pascal memer-lukan operand integer, sehingga type checker harus memeriksa bahwa ope-rand dari mod mempunyai type integer.

TYPE SYSTEM

TYPE EKSPRESI

Type Expression merupakan type dasar yang menggunakan operator disebut type constructor.

Definisi Type Expression :

1. Basic type : boolean, char, integer, real dan Basic type khusus type_error (beri signal selama type checking)

2. Type Name

3. Type Constructor, yaitu :

• Array

• Product

• Record

• Pointer

• Function

4. Type Variable

TYPE STATIC DAN DYNAMIC

Static Checking : Checking yang dilaku-kan kompiler saat program dijalan-kan dan dihentikan secara dinamis

Dynamic Checking : Checking yang di-lakukan oleh target program

SPESIFIKASI TYPE CHECKER SEDERHANA

Contoh type checker sederhana dengan grammar untuk source language

G: P ( D ; E

D ( D ; D | id : T

T ( char | integer | array | [num] of T | (T

E ( literal | num | id | E mod E | E[E] | E(

Contoh fragmen program yang dapat dihasilkan berdasarkan grammar diatas

Key : integer;

Key mod 1999

Spesifikasi type checking yang dilaku-kan pada bahasa meliputi :

• Expressions, statements, functions

• Ekivalensi struktur, nama type ekspresi

• Cycle dalam representasi type

TYPE CONVERSION

Secara eksplisit bahwa representasi, instruksi mesin dan operasi dari integer dan real berbeda oleh karena itu compiler harus mengkonversi salah satu dari type operand tersebut untuk menjamin bahwa kedua operand bertipe sama.

Type checking dalam kompiler dapat dipakai untuk menyisipkan operasi konversi kedalam intermediate repre-sentation dari source program.

Contoh :

Suatu ekspresi adalah x + i,

dimana : x bertipe real dan

i bertipe integer.

Postfix notation untuk x + i adalah :

x i inttoreal real+

dimana operator inttoreal meng-konversikan i dari integer ke real, kemudian real+ melakukan operasi penjumlahan.

OVERLOADING FUNCTION DAN OPERATOR

Overloaded Symbol :

Simbol yang mempunyai arti lain dan tergantung daripada konteksnya.

• Dalam matematika, misal : A+B yang mana operator penjumlahan (+) adalah overloaded, sebab berbeda arti dengan A dan B

• Dalam ADA, tanda kurung ( ) adalah overloaded.

SET KEMUNGKINAN TYPE

Contoh :

Dalam ADA, standar interpretasi opera-tor * adalah function dari sepasang integer. Kadang-kadang sub-expression mempunyai beberapa kemungkinan tipe. Dalam ADA, konteks harus memberi informasi yang cukup untuk mempersempit pilihan menjadi tipe tunggal.

Operator * dapat di-overload dengan menambah deklarasi sebagai berikut :

function “*” (i,j:integer) return complex;

function “*” (x,y:complex) return complex;

Setelah deklarasi diatas kemungkinan tipe untuk * adalah :

integer x integer ( integer

integer x integer ( complex

complex x complex ( complex

Misalkan bilangan 2, 3, 5 tipenya mungkin hanya integer, subekspresi dari 3*5 dapat berupa integer atau kompleks, tergantung kepada konteksnya.

Jadi untuk ekspresi 2*(3*5), maka 3*5 harus bertipe integer karena * meng-ambil sepasang integer atau sepasang bilangan kompleks sebagai argumen.

Sebaliknya, 3*5 harus bertipe kompleks jika ekspresi lengkapnya adalah (3*5)*Z dan Z dideklarasikan sebagai kompleks.

Catatan : disamping set kemungkinan type ekspresi juga penyempitan kemungkinan set kemungkinan type.

POLYMORPHIC FUNCTION

Suatu prosedur biasanya membolehkan statement dalam body-nya dieksekusi dengan argumen bertipe tetap.

Suatu polymorphic procedure dapat dipanggil (statement dalam body-nya dapat dieksekusi) dengan argumen yang berbeda tipenya.

Istilah “polymorphic” juga dapat dite-rapkan untuk sepenggal code yang dapat dieksekusi dengan argument yang berbeda tipenya.

Contoh :

C reference manual menyatakan ten-tang pointer operator & :

“Jika tipe operand adalah x, maka hasilnya akan bertipe pointer to x”.

Karena beberapa tipe data bisa menggantikan x, maka operator & dalam C bersifat polymorphic.

Didalam bahasa Ada, “generic” function bersifat polymorphic. Namun polimorfis dalam ADA terbatas. Karena istilah “generic” juga digunakan untuk overloaded function dan coercion dari argument suatu function.

KENAPA FUNGSI POLIMORPIS?

Polymorphic Function sangat menarik karena memberi fasilitas untuk meng-implementasikan algoritma yang me-manipulasi struktur data, tanpa mem-perhatikan tipe elemen dalam struktur data tersebut.

Contoh :

Dalam Pascal, program untuk menen-tukan panjang dari list berelemen integer adalah sebagai berikut :

type link = ^cell;

cell = record

info : integer;

next : link;

end;

function length(lptr : link) : integer;

var len : integer;

begin

len := 0;

while lptr nil do

begin

len := len + 1;

lptr := lptr.next;

end;

length := len;

end;

Dalam bahasa ML :

fun length(lptr) =

if null(lptr) then 0

else length(tl(lptr)) + 1;

maka :

length([“sun”,”mon”,”tue”]);

length([10,9,8]);

adalah 3

TUGAS :

• Buat fragmen program yang object oriented (misalnya : C++, Java, dan lain-lain)

• Amati perilaku disain program tersebut

• Berikan komentar anda tentang sifat polymorphisnya.

-----------------------

syntax

intermediate

representation

Type

checker

syntax

token

Intemediate Code Generator

Parser

tree

tree

stream

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download