Salah satu mata kuliah di Teknik Informatika adalah Teknik Kompilasi. Sebelum mengambil mata kuliah ini, perlu belajar Teori Bahasa dan Automata, kalau ga salah sih. Berikut ini ada program yang pernah saya buat semasa kuliah untuk membuat sintaks bahasa pemrograman sendiri. Untuk membuat kompiler sendiri, kita bisa mendefinisikan aturan bahasa programm kita sendiri, seperti program dummy compiler di bawah ini, bahasa programnya ditulis dan disimpan di file PROGRAM.DAT, baru setelah itu kita jalankan kompilernya. Walaupun program ini ditulis dengan Quick Basic dan sangat sederhana, namun mudah2an bisa membantu teman2 yang mengambil mata kuliah Teknik Kompilasi sebagai bahan inspirasi.

‘Dummy Compiler
‘Grammar Umum :
‘* Penulisan selalu menggunakan huruf besar
‘* Blok program diawali dengan _START: dan diakhiri dengan _STOP:
‘* Penulisan variabel hanya diijinkan menggunakan huruf kapital
‘* Setiap keyword diawali dengan tanda _
‘* Setiap ekspresi pernyataan diakhiri dengan ;

DIM DataStr$(1000), Var%(100), Var$(100)
OPEN “Program.Dat” FOR INPUT AS #1
i = 1
DO WHILE NOT EOF(1)
INPUT #1, DataStr$(i)
i = i + 1
LOOP

CLS
baris = 1
kolom = 1
salah = 0
valid = 0
j = 1
k = 1
l = 1
DO WHILE baris < i Panjang = LEN(DataStr$(baris)) c$ = MID$(DataStr$(j), kolom, 1) IF baris = 1 AND kolom = 1 THEN IF c$ <> “_” THEN salah = 1
SELECT CASE state
CASE 0
SELECT CASE c$
CASE “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”, “L”, “M”, “N”, “O”, “P”, “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”
state = 0
CASE “:”
state = 7
CASE “_”
state = 1
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 1
SELECT CASE c$
CASE “S”
state = 2
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 2
SELECT CASE c$
CASE “T”
state = 3
CASE “A”
state = 9
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 3
SELECT CASE c$
CASE “A”
state = 4
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 4
SELECT CASE c$
CASE “R”
state = 5
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 5
SELECT CASE c$
CASE “T”
state = 6
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 6
SELECT CASE c$
CASE “:”
state = 200
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 7
SELECT CASE c$
CASE “=”
state = 8
END SELECT
CASE 8
SELECT CASE c$
CASE “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”
c = VAL(c$)
Var%(k) = c
k = k + 1
CASE “;”
state = 200
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 9
SELECT CASE c$
CASE “Y”
state = 10
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 10
SELECT CASE c$
CASE “‘”
state = 11
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 11
SELECT CASE c$
CASE “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”, “L”, “M”, “N”, “O”, “P”, “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”
Var$(l) = Var$(l) + c$
l = l + 1
state = 11
CASE “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, ” “
Var$(l) = Var$(l) + c$
l = l + 1
state = 11
CASE “‘”
state = 12
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 12
SELECT CASE c$
CASE “;”
state = 201
CASE ELSE
salah = 1
valid = 0
END SELECT
CASE 200
IF salah = 0 THEN valid = 1
CASE 201
IF salah = 0 THEN valid = 1
max = l
FOR l = 1 TO max
PRINT Var$(l);
NEXT
END SELECT
IF kolom > Panjang THEN
IF salah = 1 AND valid = 0 THEN PRINT ” Line “; baris; ” Compilation error”
kolom = 1
baris = baris + 1
j = j + 1
state = 0
salah = 0
valid = 0
ERASE Var$
ELSE
kolom = kolom + 1
END IF
LOOP