Basit öncelik ayrıştırıcı - Simple precedence parser

İçinde bilgisayar Bilimi, bir basit öncelik ayrıştırıcı bir tür aşağıdan yukarıya ayrıştırıcı için bağlamdan bağımsız gramerler bu sadece tarafından kullanılabilir basit öncelik gramerleri.

Ayrıştırıcının gerçeklenmesi, genel kullanıma oldukça benzerdir. aşağıdan yukarıya ayrıştırıcı. Bir yığın, bir uygulanabilir önek bir duygusal form bir en sağdaki türetme. Semboller , ve tanımlamak için kullanılır eksenve ne zaman olacağını bilmek Vardiya ya da ne zaman Azalt.

Uygulama

  • Hesaplayın Wirth-Weber öncelik ilişkisi tablo.
  • Bir yığınla başlayın, yalnızca başlangıç ​​işaretçisi $.
  • Ayrıştırılan dizeyle başlayın (Giriş) ile bitti bitiş işaretçisi $.
  • Değilken (Yığın $ S'ye eşittir ve Giriş $'a eşittir) (S = Dilbilgisinin ilk sembolü)
    • Tabloda Top (yığın) ve NextToken (Giriş) arasındaki ilişkiyi arayın
    • eğer ilişki ise veya
      • Vardiya:
      • İtin (Yığın, ilişki)
      • İtme (Yığın, SonrakiToken (Giriş))
      • RemoveNextToken (Giriş)
    • eğer ilişki ise
      • Azalt:
      • SearchProductionToReduce (Yığın)
      • RemovePivot (Yığın)
      • Tabloda üretimden uçbirimsiz ile yığındaki ilk sembol arasındaki ilişkiyi arayın (üstten başlayarak)
      • İtin (Yığın, ilişki)
      • İtin (Yığın, Terminalsiz)

SearchProductionToReduce (Yığın)

  • ara Eksen en yakın yığında Üstten
  • dilbilgisi prodüksiyonlarında hangisinin sağ tarafı ile aynı olduğunu araştırın. Eksen

Misal

Dil göz önüne alındığında:

E -> E + T '| T'T '-> TT -> T * F | FF -> (E ') | numE '-> E

num bir terminaldir ve Lexer herhangi bir tamsayıyı olarak ayrıştır num.

ve Ayrıştırma tablosu:

EE 'TT 'F+*()num$
E
E '
T
T '
F
+
*
(
)
num
$
YÜK ÖNCELİĞİ GİRİŞ İŞLEM $ <2 * (1 + 3) $ SHIFT $ <2> * (1 + 3) $ AZALT (F -> num) $  * (1 + 3) $ AZALT (T -> F ) $  + 3) $ REDUCE 4 kez (F -> num) (T -> F) (T '-> T) (E -> T') $ ) $ 3 kere REDUCE (F -> num) (T -> F) (T '-> T) $ ) $ 2 kere REDUCE (E -> E + T) (E '-> E) $  $ AZALT (F -> (E')) $  $ REDUCE (T -> T * F) $  $ 2 kere REDUCE (T '-> T) (E -> T') $  $ ACCEPT

Referanslar

  • Alfred V. Aho, Jeffrey D. Ullman (1977). Derleyici Tasarımının İlkeleri. 1. Baskı. Addison – Wesley.
  • William A. Barrett, John D. Couch (1979). Derleyici yapımı: Teori ve Uygulama. Science Research Associate.
  • Jean-Paul Tremblay, P.G.Sorenson (1985). Derleyici Yazma Teorisi ve Pratiği. McGraw-Hill.