ANTLR article nie spełniał warunków PEG.
LL (*) jest podzbiorem DCFG (deterministycznej gramatyki bezkontekstowej), która jest podzbiorem CFG (Gramatyka bezkontekstowa).
PEG może wyrazić kontekstową gramatyk jak A{n}B{n}C{n}
, w których A
i B
i C
wszystkich występujących n
razy. Oto definicja:
s := &(x C) A+ y/ε
x := A x B/A B
y := B y C/B C
Ale nie ma sposobu, aby określić taką gramatykę w CFG (dowód lematu polega pompy). Tak więc PEG nie jest podzbiorem CFG. Czy PEG jest nadzbiorem CFG? Nie wiem
Dwie główne różnice między LL (*) i PEG:
LL (*) mogą tylko uprzedzona wzór DFA, a PEG może uprzedzona rekurencyjnego wzoru. Na przykład w PEG możesz wczytać parens zagnieżdżone, podczas gdy LL (*) nie może.
Operator wybór /
w PEG jest priorytetem wybór (lub „zaborczy”), co oznacza, że jeśli masz regułę A/AB
, nigdy nie osiągnie prawą stronę AB
. W LL (*) dla reguły A | AB
możliwe jest dopasowanie AB
.
Jeśli masz gramatyki PEG bez uprzedzona, czy Twój wzór uprzedzona może być zmniejszona do DFA, to można przełożyć na LL (*). Jeśli nie, to nie jest możliwe.
Gramatyka PEG nie jest jeszcze poprawna. Spowoduje również zanalizowanie A {n} B {n + 1} C {n + 1}. – CoronA
@CoronA Dzięki za wskazanie, zredagowałem odpowiedź z poprawioną gramatyką, aby upewnić się, że C ma miejsce tuż po A {n} B {n}. – luikore