Cara kerja & teori di balik aplikasi
Penjelasan lengkap konsep Pushdown Automata yang diimplementasikan, beserta panduan singkat menggunakan alat validasi.
Konsep Pushdown Automata
Pushdown Automata (PDA) adalah model komputasi yang memperluas Finite Automata dengan menambahkan sebuah stack (tumpukan) sebagai memori tambahan. Berkat stack ini, PDA mampu mengenali kelas bahasa yang lebih luas, yaitu bahasa bebas konteks (context-free language) — termasuk bahasa dengan struktur bersarang seperti tanda kurung, ekspresi aritmatika, dan tentu saja, struktur tag HTML.
Intuisinya sederhana: setiap kali PDA membaca simbol "pembuka", simbol tersebut disimpan (di-push) ke dalam stack. Ketika PDA membaca simbol "penutup", ia akan mengambil (pop) simbol paling atas dari stack dan memeriksa apakah keduanya berpasangan. Jika seluruh input habis dibaca dan stack kembali kosong, input tersebut diterima (accept).
Definisi Formal (7-tuple)
Secara formal, PDA didefinisikan sebagai:
M = (Q, Σ, Γ, δ, q₀, Z₀, F)
| Simbol | Nama | Implementasi pada Aplikasi Ini |
|---|---|---|
| Q | Himpunan state | { q_scan, q_accept, q_reject } |
| Σ | Alfabet input | Token tag HTML: tag pembuka, tag penutup, tag mandiri (self-closing/void) |
| Γ | Alfabet stack | Nama tag HTML (div, p, span, dst.) ditambah simbol dasar Z0 |
| δ | Fungsi transisi | Aturan PUSH saat tag pembuka, POP & pencocokan saat tag penutup |
| q₀ | State awal | q_scan |
| Z₀ | Simbol dasar stack | "Z0", penanda dasar stack sebelum tag apa pun diproses |
| F | State akhir (final) | q_accept — tercapai bila stack kembali hanya berisi Z0 di akhir input |
Algoritma Validasi
Mesin PDA pada aplikasi ini memproses token satu per satu dengan aturan berikut:
Tag pembuka (mis. <div>) → nama tag di-push ke stack.
Tag penutup (mis. </div>) → pop puncak stack, lalu dibandingkan dengan nama tag penutup.
Jika nama tidak cocok, atau stack sudah kosong saat hendak pop → PDA pindah ke q_reject dan proses dihentikan.
Tag mandiri (self-closing/void seperti <br>, <img>) tidak memengaruhi stack sama sekali.
Setelah token terakhir diproses, jika stack kembali hanya berisi Z0 → PDA berpindah ke q_accept (valid). Jika tidak → q_reject (ada tag yang belum ditutup).
Cara Menggunakan Aplikasi
- Buka halaman Validator.
- Tempelkan kode HTML pada kotak editor, atau klik salah satu contoh yang tersedia.
- Klik tombol "Jalankan Validasi".
- Lihat status valid/tidak valid, lokasi kesalahan (jika ada), serta tabel jejak langkah PUSH/POP dan state yang dilalui.
Batasan Aplikasi
- Fokus utama adalah keseimbangan struktur tag, bukan validasi HTML5 secara penuh (mis. atribut wajib, urutan elemen semantik, dsb).
- Isi di dalam tag
<script>dan<style>tetap dipindai sebagai teks biasa, sehingga tanda "<" atau ">" di dalam JavaScript/CSS string sebaiknya dihindari pada contoh input. - Panjang input dibatasi hingga 20.000 karakter demi menjaga performa server.