PEMBUATAN SCANNER
Oleh :
ANGGI NAMORA SITEPU (131401092)
DAFTAR ISI
Daftar Isi.................................................................................................................................i
BAB I ANALISIS LEKSIKAL
BAB I
ANALISIS LEKSIKAL
bagian-bagian
disebut
Token.
Analisis
Leksikal
mengerjakan
BAB II
PERANCANGAN SCANNER
dengan
bahasa
pemograman
lainnya
yang
didukung
oleh
Export
Nil
Not
Object
Or
Or
Packed
Procedure
Program
Record
Shl
Shr
File
For
Function
Goto
If
Implementation
In
Inherited
Label
Library
Mod
String
Then
To
Type
Unit
Until
Uses
With
Xor
Else
Set
Interface
While
Downto
Repeat
Inline
Var
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
Relational Operator(Operasi Logika) :
Semua operator logika yang biasa dipakai dalam Pascal
-> < , > , = , <= , >= , !=
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.
<
Start
=
t_L
t_LE
>
>
t_NE
t_E
Koment
Apa saja selain }
t_G
t_GE
BAB III
SCREENSHOT
BAB IV
KESIMPULAN
BAB V
SOURCE CODE
string coding=tb1.Text;
tokens.Clear();
cektokens.Clear();
string result="";
bool error=false;
> Code untuk menghapus komentar dan whitespace
string clear=tb1.Text;
clear = clear.Replace(" ", "");
clear = Regex.Replace(clear, @"\{(.*)\}", "");
tb2.Text = clear;
string temp="";
for(int i=0;i<coding.Length;i++){
if(char.IsWhiteSpace(coding[i])){
i++;
while (i<coding.Length){
if(char.IsWhiteSpace(coding[i])){
i++;
}
else {i--; break;}
}
if(temp != ""){
tokens.Add(temp);
}
temp="";
}
else {temp += coding[i];}
}
if (temp !="") tokens.Add(temp);
for(int i=0;i<tokens.Count;i++){
if(_keyword(tokens[i])){
cektokens.Add(tokens[i] +" \t:
keyword"+System.Environment.NewLine);
}
else if(_id(tokens[i])){
cektokens.Add(tokens[i] +" \t: id"+System.Environment.NewLine);
}
else if(_int(tokens[i])){
cektokens.Add(tokens[i] +" \t: int"+System.Environment.NewLine);
}
else if(_opr(tokens[i])){
cektokens.Add(tokens[i] +" \t: opr"+System.Environment.NewLine);
}
else if(_oprlogika(tokens[i])){
cektokens.Add(tokens[i] +" \t: logopr"+System.Environment.NewLine);
}
else if(_delimiter(tokens[i])){
cektokens.Add(tokens[i] +" \t:
delimiter"+System.Environment.NewLine);
}
}
if (error){}
else{for (int i=0;i<cektokens.Count;i++){
result += cektokens[i] +"";
}
} tb2.Text=result;
}
}
return false;
}
bool _delimiter(string lex){
for (int i=0;i<del.GetLength(0);i++){
if(lex==del[i]) return true;
}
return false;
}
> Untuk menentukan identifier beserta atributnya
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;
}
}
}