PEMBUATAN SCANNER
Oleh :
Daftar Isi.................................................................................................................................i
BAB IV KESIMPULAN
BAB V SOURCECODE
ANALISIS LEKSIKAL
Analisis ini melakukan penerjemahan masukan menjadi bentuk yang lebih berguna
untuk tahap-tahap kompilasi berikutnya. Analisis Leksikal merupakan antarmuka
antara kode program sumber dan analisis sintaktik (parser). Scanner melakukan
pemeriksaan karakter per karakter pada teks masukan, memecah sumber program
menjadi bagian-bagian disebut Token. Analisis Leksikal mengerjakan
pengelompokkan urutan-urutan karakter ke dalam komponen pokok: identifier,
delimeter, simbol-simbol operator, angka, keyword, noise word, blank, komentar, dan
seterusnya menghasilkan suatu Token Leksikal yang akan digunakan pada Analisis
Sintaktik.
Model dasar untuk membentuk suatu Analisis Leksikal adalah Finite-State Automata,
Pada analisis leksikal yang dituntun tabel (table-driven lexical analyzer), maka
satu-satunya yang berubah adalah tabel itu sendiri. Kadang diperlukan interaksi
analisis leksikal dan analisis sintaktik yang lebih kompleks. Sehingga analisis leksikal
harus dapat menganggap string sebagai token bertipe, bukan identifier. Untuk itu
perlu komunikasi tingkat lebih tinggi yang biasanya dilakukan suatu struktur data
dipakai bersama seperti tabel simbol. Analisis Sintaktik dapat memasukkan string ke
tabel simbol, mengidentifikasi sebagai Type atau typedef, sehingga analisis leksikal
dapat memeriksa tabel simbol untuk menentukan apakah lexeme adalah tipe token
atau identifier.
PERANCANGAN SCANNER
Identifier :
Semua letter yang memiliki syarat :
-> [a-z][A-Z][0-9] [a-z][A-Z]
Operator :
Semua operator yang biasa dipakai dalam Pascal
-> + , - , / , * , := , mod , div
Delimiter :
Semua bentuk pungtuasi dan kurung yang biasa dipakai dalam Pascal
-> ( , ) , [ , ] , , , . , : , ;
Konstanta (Integer) :
Semua bilangan yang termasuk dalam bilangan integer
-> [0-9][0-9]…
2.4 Algoritma Penghapusan WhiteSpace dan Komentar
Whitespace
Procedure spaces
Begin
While karakter=” ” do getchar;
Repeat
Case karakter of
‘ ‘ : begin //menentukan spasi
Delete karakter; //penhapusan spasi
Repeat getchar;
End;
EOF:exit;
End;
Komentar
Procedure comment
Begin
While karakter=” “ do Getchar;
Repeat
Case karakter of
‘{‘ : begin //penentuan awal kurung komentar
repeat Getchar; //men-scan seluruh karakter dan mengabaikannya
//sampai akhir kurung komenter ditemukan
until karakter=’}’; //menentukan akhir kurung komentar
end;
EOF:exit;
End;
Supescript * : berarti bisa tidak muncul, bisa juga muncul berhingga kali (0-n)
Superscript + : berarti minimal muncul satu kali (1-n) •
+ : berarti union atau bisa diganti dengan notasi U
. : berarti konkatenasi, biasanya tanpa ditulis titiknya, misal ab sama dengan a.b
Regular Expression
Identifier :
letter(letter|digit)*
-> dengan artian set yang dapat menjadi identifier ialah yang dimulai dengan letter
([a-z]|[A-Z]) lalu diikuti dengan boleh letter ([a-z]|[A-Z]) juga atau digit ([0-9]), dan
dapat diulang.
Number /Integer:
digit*
-> dengan artian bahwa semua nilai bilangan yang integer dapat diterima kecuali
bilangan real, imaginer , dsb.
Delimiter
(: | ; | . | , | [ | ] | ( | ) )*
-> dengan artian bahwa semua symbol yang dapat digunakan sebagai delimiter dalam
pascal dapat diterima dan dapat berulang
Operator :
(+ | - | * | mod | div)*
->dengan artian bahwa semua operator aritmatika dasar dapat diterima sebagai
inputan
Operator Logika :
( := | = | > | < | <= | >=)
-> dengan artian bahwa semua operator logika yang biasa digunakan dapat diterima.
Contoh :
Misalkan sebuah sebuah bahasa memiliki himpunan simbol terminal / token yaitu : < ,
> , =, <= , >=, <> . Atau bisa dibaca sebagai token-token : t_L, t_G, t_E, t_LE, t_GE,
t_NE ( G=Greater, L=Less, E=Equal, N=not)
Bahasa tersebut juga mendukung penulisan komentar yang diawali dengan “{“ dan
diakhiri “}”.
< =
Start t_L t_LE
} = >
t_NE
t_E
>
{
= =
Token – token yang telah dihasilkan dalam proses leksikal terdiri dari beberapa
seperti identifier, keyword, konstanta, operator dsb. Dan token-token ini diperoleh
dengan menggunakan Finite State Automata.
Dan dengan munculnya token-token dalam scanner maka scanner dapat dinyatakan
berjalan dengan baik.
BAB V
SOURCE CODE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Drawing;
using System.Windows.Forms;
namespace latihan1
{
/// <summary>
/// Description of MainForm.
/// </summary>
public partial class MainForm : Form
{
public MainForm()
{ InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
string coding=tb1.Text;
tokens.Clear();
cektokens.Clear();
string result="";
bool error=false;
bool _id(string lex){
if(lex[0]>='a' && lex[0] <='z'){
for(int i=0;i<lex.Length;i++){
if(lex[i]>='a' && lex[i] <='z'){
}
else if(lex[i]>='0' && lex[i]<='9'){
}
else{
return false;
}
}
return true;
}
return false;
}
}
}