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.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.
Related searches
- type a type b personality
- type a vs type b
- type a type b personality test
- crps type 2 versus type 1
- type a vs type b personality test
- type a and type b
- type a type b personality test printable
- type 1 type 2 difference
- type a and type b personality
- type a versus type b personality
- type 1 diabetes vs type 2 diabetes
- nstemi type 1 vs type 2