Saya mencari definisi yang jelas tentang apa itu "tokenizer", "parser" dan "lexer" dan bagaimana mereka terkait satu sama lain (misalnya, apakah parser menggunakan tokenizer atau sebaliknya)? Saya perlu membuat program akan melalui c / h file sumber untuk mengekstrak deklarasi dan definisi data.
Saya telah mencari contoh dan dapat menemukan beberapa info, tetapi saya benar-benar berjuang untuk memahami konsep dasar seperti aturan tata bahasa, pohon parse dan pohon sintaksis abstrak dan bagaimana mereka saling berhubungan satu sama lain. Akhirnya konsep-konsep ini perlu disimpan dalam program yang sebenarnya, tetapi 1) seperti apa bentuknya, 2) apakah ada implementasi yang umum.
Saya telah melihat Wikipedia tentang topik dan program ini seperti Lex dan Yacc, tetapi karena belum pernah melalui kelas kompiler (EE mayor), saya merasa sulit untuk sepenuhnya memahami apa yang sedang terjadi.
Contoh:
Seorang lexer atau tokeniser akan membaginya menjadi token 'int', 'x', '=', '1', ';'.
Pengurai akan mengambil token tersebut dan menggunakannya untuk memahami dengan cara tertentu:
sumber
Saya akan mengatakan bahwa lexer dan tokenizer pada dasarnya adalah hal yang sama, dan bahwa mereka menghancurkan teks menjadi bagian-bagian komponennya ('token'). Pengurai kemudian menginterpretasikan token menggunakan tata bahasa.
Saya tidak akan terlalu terpaku pada penggunaan terminologis yang tepat - orang sering menggunakan 'parsing' untuk menggambarkan tindakan apa pun menafsirkan segumpal teks.
sumber
( menambah jawaban yang diberikan )
sumber