Dalam proses pembuatan program dari sebuah bahasa menjadi instruksi yang dapat dieksekusi oleh mesin, terdapat pemeriksaan sintaks bahasa atau parsing yang dibuat oleh programmer untuk memastikan program dapat dieksekusi tanpa menghasilkan error
. Parsing ini bertujuan untuk memastikan instruksi yang dibuat oleh programmer mengikuti aturan yang sudah ditentukan oleh bahasa tersebut. Baik bahasa berjenis interpreter maupun compiler, keduanya pasti melakukan pemeriksaan sintaks. Perbedaannya terletak pada apa yang dilakukan setelah proses pemeriksaan (kompilasi/compile) tersebut selesai dilakukan.
Dibutuhkan grammar bahasa dan algoritma parser untuk melakukan parsing. Sudah sangat banyak grammar dan algoritma yang dikembangkan untuk menghasilkan compiler dengan performa yang tinggi. Terdapat CFG, CNF-e, CNF+e, 2NF, 2LF, dll
untuk grammar yang dapat digunakan, dan terdapat LL(0), LL(1), CYK, Earley’s Algorithm, LALR, GLR, Shift-reduce, SLR, LR(1), dll
untuk algoritma yang dapat digunakan untuk melakukan parsing.
Nama | NIM |
---|---|
M. Abdul Aziz Ghazali | 13521128 |
M. Zaki Amanullah | 13521146 |
M. Rifqi Farhansyah | 13521166 |
Pada tugas besar ini, telah diimplementasikan parser JavaScript (Node.js)
untuk beberapa statement dan sintaks bawaan JavaScript. Konsep CFG (Context Free Grammar)
digunakan untuk pengerjaan parser yang mengevaluasi syntax program. Sementara itu, nama variabel dan operasi (+, -, >, dll) dalam program, akan dievalusi menggunakan FA (Finite Automata)
.
│ coba.js
│ coba.py
│ main.py
│ parser_main.py
│ README.md
│
├───.vscode
│ tasks.json
│
├───CYK
│ │ cyk.py
│ │ __init__.py
│ │
│ └───__pycache__
│ cyk.cpython-310.pyc
│ cyk.cpython-39.pyc
│ __init__.cpython-310.pyc
│ __init__.cpython-39.pyc
│
├───fileProcessing
│ │ file.txt
│ │ file_processing.py
│ │ token.py
│ │ __init__.py
│ │
│ └───__pycache__
│ token.cpython-310.pyc
│ token.cpython-39.pyc
│ __init__.cpython-310.pyc
│ __init__.cpython-39.pyc
│
├───grammar
│ │ debug_grammar.txt
│ │ grammar.txt
│ │ grammar_convert.py
│ │ grammar_parser.py
│ │ __init__.py
│ │
│ └───__pycache__
│ grammar_convert.cpython-310.pyc
│ grammar_convert.cpython-39.pyc
│ grammar_parser.cpython-310.pyc
│ grammar_parser.cpython-39.pyc
│ __init__.cpython-310.pyc
│ __init__.cpython-39.pyc
│
├───result
│ tokenResult.txt
│
├───variable_fa
│ variable_fa.py
│
└───__pycache__
CFGtoCNF.cpython-310.pyc
CFGtoCNF.cpython-39.pyc