Pertimbangkan operator infiks seperti subset (⊂). Operator subset bukan asosiatif, karena hasilnya (boolean) tidak setel sendiri dan sehingga tidak dapat dimasukkan ke dalam satu atau sisi lain dari operator subset. Mempertimbangkan:

S ⊂ T ⊂ M

Idealnya ini akan menjadi kegagalan parse, tetapi pengasuh pohon tampaknya tidak memungkinkan kegagalan parse berdasarkan konflik operator; Sebaliknya, itu mengharuskan Anda secara jelas menyelesaikan konflik pada waktu pembuatan parser dengan menentukan asosiasi atau prioritas. Apakah ada cara untuk menunjukkan ke pengasuh pohon ini harus menjadi konflik parse? Tidak hanya untuk operator non-asosiatif dengan jenis yang sama, tetapi juga antara operator yang berbeda dengan presedensi yang setara yang bukan asosiatif, seperti:

S ⊂ T ⊆ M

Atau satu-satunya solusi untuk menentukan parse yang tidak ambigu, lalu menangani ini di tingkat semantik?

0
ahelwer 3 April 2021, 17:56

1 menjawab

Jawaban Terbaik

Anda benar ini harus ditangani di tingkat semantik. Jadi ⊂ harus ditandai kidal-associative dalam tata bahasa untuk tujuan parsing, meskipun tidak. Untuk string S ⊂ T ⊂ M kemudian akan diuraikan sebagai:

(op ⊂
  (op ⊂
    (id S)
    (id T)
  )
  (id M)
)

Di tingkat semantik Anda kemudian dapat menambahkan aturan yang memeriksa apakah Apakah ada node anak yang juga (atau operator lain dari precedensi yang sama), yang dapat Anda permukaankan sebagai asosiasi / kesalahan konflik diutamakan .

0
ahelwer 4 April 2021, 13:50