Saya sedang memikirkan tata bahasa untuk bahasa indendasi-sensitif dan sepertinya tata bahasa CF akan melakukan trik jika dikombinasikan dengan parameter. Sebagai contoh, pertimbangkan fragmen ini untuk tata bahasa Python yang disederhanakan dalam format seperti ANTLR:
// on top-level the statements have empty indent
program
: statement('')+
;
// let's consider only one compound statement and one simple statement for now
statement(indent)
: ifStatement(indent)
| passStatement(indent)
;
passStatement(indent)
: indent 'pass' NEWLINE
;
// statements under if must have current indent plus 4 spaces
ifStatement(indent)
: indent 'if' expression ':' NEWLINE (statement(indent ' ')+)
;
Pertanyaan saya: Apakah tata bahasa semacam ini (CFG dengan parameter) memiliki nama?
Tampaknya tidak akan sulit untuk menulis parser keturunan rekursif untuk tata bahasa ini (parameter pada dasarnya harus parser). Apa yang bisa menjadi kesulitan dengan pendekatan ini?
Apakah penambahan parameter meningkatkan kelas bahasa yang didukung di atas bebas konteks?
Jawaban:
Tata bahasa Affix ( tata bahasa bebas parameterisasi konteks) dipelajari secara luas oleh ilmuwan komputer Belanda terkemuka Cornelis HA Koster , dimulai dengan makalahnya tahun 1962 "Basic English, tata bahasa generatif untuk bagian dari bahasa Inggris", yang ditulis bersama dengan LGLT Meertens. Pada tahun 1970, ia menghasilkan formalisme konsep; ikhtisar yang berguna tersedia dalam makalahnya pada tahun 1971 "Affix Grammars for Programming Languages", sebuah versi yang saya temukan di Citeseer .
Dalam makalah itu, Koster membandingkan formalismenya (dan yang serupa lainnya) dengan Van Wijngaarden tata bahasa dua tingkat , dan menemukan mereka sangat mirip.
Bibliografi beranotasi Dick Grune yang tak ternilai tentang teknik penguraian meliputi sejumlah besar referensi bermanfaat lainnya untuk tata bahasa tambahan dan formalisme non-Chomsky lainnya. (Lihat bagian 18.2.6 dari daftar pustaka, meskipun ada makalah yang berguna di bagian lain.) Grune mencakup tata bahasa imbuhan singkat di §15.3.2 edisi kedua Teknik Parsing: Panduan Praktis (dan bahkan lebih singkat lagi di edisi pertama , tersedia online) menyebutkan fakta bahwa mudah untuk mengadaptasi teknik parsing top-down (dan lainnya).
Koster, yang juga seorang editor laporan Algol 68, adalah pengembang asli dari Compiler Description Language (CDL) , berdasarkan ide-idenya tentang tata bahasa tambahan. Toolkit ini dan turunannya kemudian digunakan dalam produksi selama bertahun-tahun. Halaman ini , yang saya temukan dengan pencarian Google dan keabadiannya saya tidak bisa jamin, memiliki tautan ke manual dan situs pengunduhan untuk CDL3.
sumber
Ambil lemma pemompaan untuk CFG :
Ambil tata bahasanya
Ini menggambarkan segitiga bintang:
Ini berarti bahwa segitiga bintang bukan bahasa bebas konteks.
Atau contoh yang lebih sederhana:
sumber
Saya belum pernah melihat formalisme ini disajikan (bahkan dalam sesuatu seperti Teknik Parsing Grune ), tergantung pada rincian tentang bagaimana Anda mendefinisikan dengan tepat "parameter harus pada dasarnya parser", itu tampak dapat dipetakan untuk van Wijngaarden dua tata bahasa level, yang memiliki kekuatan yang sama seperti tata bahasa struktur fase tidak terbatas (yaitu lebih kuat daripada konteks sensitif, Anda bisa menulis tata bahasa VW yang memberikan semua program penghentian).
sumber