Sunteți pe pagina 1din 7

ALGORITMUL 1-PREDICTIV PENTRU GRAMATICI 𝑳𝑳(𝟏) (tari)

Se dă gramatica 𝐺 cu simbolul de start 𝑆 și producțiile numerotate:


1: 𝑆 → 𝑋𝑌 2: 𝑋 → 𝑏𝑋𝑎 3: 𝑋 → 𝑐 4: 𝑌 → 𝑏𝑌 5: 𝑌 → 𝑎 6: 𝑌 → 𝜆
Sa se aplice lui 𝐺 algoritmul 1-predictiv pentru gramatici 𝐿𝐿(1) tari.
Rezolvare: Se extinde gramatica 𝐺 prin introducerea producției 𝑆′ → 𝑆#.
Se calculeaza 𝐹𝑖𝑟𝑠𝑡, 𝐹𝑜𝑙𝑙𝑜𝑤:
REMEMBER: La modul general, pentru o gramatică independentă de context 𝐺 = (𝑁, Σ, S, P)
și pentru 𝛼, 𝛽 ∈ (𝑁 ∪ Σ)∗
∗ ∗
𝐹𝐼𝑅𝑆𝑇 (𝛼) = {𝑥 ∈ Σ | 𝛼 ⇒ 𝑥𝛼 ′ } ∪ {𝜆 |𝛼 ⇒𝜆}
𝑠 𝑠

𝐹𝑂𝐿𝐿𝑂𝑊 (𝛼) = {𝑥 ∈ Σ |∃ 𝑆 ⇒ w𝛼𝛽, 𝑤 ∈ Σ ∗ , 𝛽 ∈ (𝑁 ∪ Σ)∗ , 𝑥 ∈ 𝐹𝐼𝑅𝑆𝑇 (𝛽)}
𝑠
• 𝐹𝐼𝑅𝑆𝑇 (𝛼𝛽) = 𝐹𝐼𝑅𝑆𝑇 (𝐹𝐼𝑅𝑆𝑇 (𝛼)𝐹𝐼𝑅𝑆𝑇 (𝛽))
• daca 𝜆 ∉ 𝐹𝐼𝑅𝑆𝑇(𝛼), 𝐹𝐼𝑅𝑆𝑇(𝛼) ≠ ∅ atunci 𝐹𝐼𝑅𝑆𝑇 (𝛼𝛽) = 𝐹𝐼𝑅𝑆𝑇 (𝛼)
• daca 𝜆 ∈ 𝐹𝐼𝑅𝑆𝑇(𝛼) atunci 𝐹𝐼𝑅𝑆𝑇 (𝛼𝛽) = 𝐹𝐼𝑅𝑆𝑇 (𝛼) ∪ 𝐹𝐼𝑅𝑆𝑇(𝛽)

• Dacă 𝛼 ⇒ 𝛽 atunci 𝐹𝐼𝑅𝑆𝑇 (𝛽) ⊆ 𝐹𝐼𝑅𝑆𝑇 (𝛼)
• Dacă 𝐴 → 𝛼 ∈ 𝑃 atunci 𝐹𝐼𝑅𝑆𝑇 (𝛼) ⊆ 𝐹𝐼𝑅𝑆𝑇 (𝐴)
• 𝐹𝐼𝑅𝑆𝑇 (𝑎) = {𝑎}, ∀𝑎 ∈ Σ
• 𝐹𝐼𝑅𝑆𝑇 (𝜆) = { 𝜆}
• 𝐹𝐼𝑅𝑆𝑇 (𝑎𝑥) = {𝑎}, ∀𝑎 ∈ Σ, ∀𝑥 ∈ (𝑁 ∪ Σ)∗
• 𝐹𝐼𝑅𝑆𝑇 (𝑋1 … 𝑋𝑚 ) = 𝐹𝐼𝑅𝑆𝑇(𝐹𝐼𝑅𝑆𝑇(𝑋1 ) … 𝐹𝐼𝑅𝑆𝑇(𝑋𝑚 )), 𝑋1 , … , 𝑋𝑚 ∈ 𝑁 ∪ Σ
• 𝐹𝐼𝑅𝑆𝑇(𝐿) =∪𝑥∈𝐿 𝐹𝐼𝑅𝑆𝑇(𝑥), 𝐿 ⊆ Σ ∗

• Pentru gramatica 𝐺 = (𝑁, Σ, 𝑆, 𝑃):


• Inițializare: 𝐹𝐼𝑅𝑆𝑇 (𝑎) = {𝑎}, ∀𝑎 ∈ Σ; 𝐹𝐼𝑅𝑆𝑇 (𝜆) = { 𝜆}; 𝐹𝐼𝑅𝑆𝑇(𝐴) =
{𝑎 ∈ Σ|𝐴 → 𝑎𝛼 ∈ 𝑃}, 𝐴 ∈ 𝑁.
Repeta cat timp se adauga noi siruri
∀𝐴 → 𝑋1 ⋯ 𝑋𝑚 ∈ 𝑃, 𝑚 ≥ 1, |𝑋1 ⋯ 𝑋𝑚 |𝑁 ≥ 1
- daca 𝜆 ∉ 𝐹𝐼𝑅𝑆𝑇(𝑋1 ), 𝒂𝒅𝒂𝒖𝒈𝒂 𝐹𝐼𝑅𝑆𝑇(𝑋1 ) 𝑙𝑎 𝐹𝐼𝑅𝑆𝑇(𝐴)
- daca 𝜆 ∈ 𝐹𝐼𝑅𝑆𝑇(𝑋1 ) ∪ … ∪ 𝐹𝐼𝑅𝑆𝑇 (𝑋𝑘 ), 𝜆 ∉ 𝐹𝐼𝑅𝑆𝑇(𝑋𝑘+1 ), atunci adauga
𝐹𝐼𝑅𝑆𝑇(𝑋1 ) ∪ … ∪ 𝐹𝐼𝑅𝑆𝑇 (𝑋𝑘+1 ) − {𝜆} la 𝐹𝐼𝑅𝑆𝑇(𝐴)
- daca 𝜆 ∈ 𝐹𝐼𝑅𝑆𝑇(𝑋1 ) ∪ … ∪ 𝐹𝐼𝑅𝑆𝑇 (𝑋𝑚 ), atunci adauga la 𝐹𝐼𝑅𝑆𝑇 (𝐴) multimea
𝐹𝐼𝑅𝑆𝑇(𝑋1 ) ∪ … ∪ 𝐹𝐼𝑅𝑆𝑇 (𝑋𝑚 )

𝐹𝑖𝑟𝑠𝑡 𝐼𝑁𝐼𝑇𝐼𝐴𝐿𝐼𝑍𝐴𝑅𝐸 𝑃𝐴𝑆𝑈𝐿 1


𝜆 𝜆
# #
𝑎 𝑎
𝑏 𝑏
𝑐 𝑐
𝑆 𝑏, 𝑐
𝑋 𝑏, 𝑐
𝑌 𝑏, 𝑎, 𝜆

𝑰𝒏𝒊ț𝒊𝒂𝒍𝒊𝒛𝒂𝒓𝒆.
𝐹𝑂𝐿𝐿𝑂𝑊(𝑆) = {#)}
𝑹𝒆𝒑𝒆𝒕𝒂 𝑐𝑎𝑡 𝑡𝑖𝑚𝑝 𝑠𝑒 𝑎𝑑𝑎𝑢𝑔𝑎 𝑛𝑜𝑖 𝑠𝑖𝑟𝑢𝑟𝑖
∀𝐴 → 𝛼𝐵𝛽 ∈ 𝑃, 𝐵 ∈ 𝑁, 𝛼, 𝛽 ∈ (𝑁 ∪ 𝛴)∗ ,
𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊 (𝐵) 𝒂𝒅𝒂𝒖𝒈𝒂 𝑚𝑢𝑙𝑡𝑖𝑚𝑒𝑎 𝐹𝐼𝑅𝑆𝑇 (𝛽 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊 (𝐴))

𝑆 → 𝑋𝑌; 𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊(𝑋) 𝑎𝑑𝑎𝑢𝑔 𝐹𝐼𝑅𝑆𝑇(𝑌 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑆)) = 𝐹𝐼𝑅𝑆𝑇(𝑌#) =𝑃𝐴𝑆 1 {𝑏, 𝑎, #)


𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊(𝑌) 𝑎𝑑𝑎𝑢𝑔 𝐹𝐼𝑅𝑆𝑇(𝜆 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑆)) = 𝐹𝑂𝐿𝐿𝑂𝑊(𝑆)
𝑋 → 𝑏𝑋𝑎; 𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊(𝑋) 𝑎𝑑𝑎𝑢𝑔 𝐹𝐼𝑅𝑆𝑇(𝑎 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑋)) = {𝑎}

𝐹𝑂𝐿𝐿𝑂𝑊 𝐼𝑁𝐼𝑇𝐼𝐴𝐿𝐼𝑍𝐴𝑅𝐸 𝑃𝐴𝑆𝑈𝐿 1 𝑃𝐴𝑆𝑈𝐿 2


𝑆 #
𝑋 𝑏, 𝑎, #
𝑌 #

Simbolurile lookahead pentru fiecare productie:


1: 𝑆 → 𝑋𝑌; 𝐹𝐼𝑅𝑆𝑇(𝑋𝑌 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑆)) = 𝐹𝐼𝑅𝑆𝑇(𝑋𝑌#) = 𝐹𝐼𝑅𝑆𝑇(𝑋)(𝜆 ∉ 𝐹𝐼𝑅𝑆𝑇(𝑋)) =
= {𝑏, 𝑐}
2: 𝑋 → 𝑏𝑋𝑎; 𝐹𝐼𝑅𝑆𝑇(𝑏𝑋𝑎 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑋)) = {𝑏}
3: 𝑋 → 𝑐; 𝐹𝐼𝑅𝑆𝑇(𝑐 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑋)) = {𝑐}
4: 𝑌 → 𝑏𝑌; 𝐹𝐼𝑅𝑆𝑇(𝑏𝑌 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑌)) = {𝑏}
5: 𝑌 → 𝑎; 𝐹𝐼𝑅𝑆𝑇(𝑎 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑌)) = {𝑎}
6: 𝑌 → 𝜆 ; 𝐹𝐼𝑅𝑆𝑇(𝜆 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑌)) = 𝐹𝑂𝐿𝐿𝑂𝑊(𝑌) = {#}

Tabela de simboluri:
𝑎 𝑏 𝑐 #
𝑆 𝑒𝑟𝑟𝑜𝑟 (𝑋𝑌, 1) (𝑋𝑌, 1) 𝑒𝑟𝑟𝑜𝑟
𝑋 𝑒𝑟𝑟𝑜𝑟 (𝑏𝑋𝑎, 2) (𝑐, 3) 𝑒𝑟𝑟𝑜𝑟
𝑌 (𝑎, 5) (𝑏𝑌, 4) 𝑒𝑟𝑟𝑜𝑟 (𝜆, 6)
Tabela nu are intrări multiple, rezultă că gramatica este de tip 𝐿𝐿(1).
Analiza sirului 𝑏𝑐𝑎𝑏: configuratia initiala este (𝑏𝑐𝑎𝑏#, 𝑆#, 𝜆)
Schimbarile de configuratii:
(𝑏𝑐𝑎𝑏#, 𝑆#, 𝜆) ⊢ (𝑏𝑐𝑎𝑏#, 𝑋𝑌#, 1) ⊢ (𝑏𝑐𝑎𝑏#, 𝑏𝑋𝑎𝑌#, 12) ⊢ (𝑐𝑎𝑏#, 𝑋𝑎𝑌#, 12)
⊢ (𝑐𝑎𝑏#, 𝑐𝑎𝑌#, 123) ⊢ (𝑏#, 𝑌#, 123) ⊢ (𝑏#, 𝑏𝑌#, 1234) ⊢ (#, 𝑌#, 1234) ⊢
⊢ (#, #, 12346) ⊢ 𝒂𝒄𝒄𝒆𝒑𝒕
12346 reprezintă derivarea stângă unică a șirului 𝑏𝑐𝑎𝑏.
Analiza sirului 𝑏𝑐𝑐: configuratia initiala este (𝑏𝑐𝑐#, 𝑆#, 𝜆)
Schimbarile de configuratii:
(𝑏𝑐𝑐#, 𝑆#, 𝜆) ⊢ (𝑏𝑐𝑐#, 𝑋𝑌#, 1) ⊢ (𝑏𝑐𝑐#, 𝑏𝑋𝑎𝑌#, 12) ⊢ (𝑐𝑐#, 𝑋𝑎𝑌#, 12) ⊢
(𝑐#, 𝑎𝑌#, 123) ⊢ 𝒆𝒓𝒓𝒐𝒓 deoarece 𝑐 ≠ 𝑎.

ALGORITMUL 𝑺𝑳𝑹(𝟏): Se dă gramatica 𝐺 cu simbolul de start 𝑆 și producțiile numerotate:


1: 𝑆 → 𝐴𝑏 2: 𝑆 → 𝐴𝑐𝐵 3: 𝐴 → 𝐴𝐵 4: 𝐴 → 𝑎 5: 𝐵 → 𝑎
Să se aplice algoritmul 𝑆𝐿𝑅(1) pentru șirul 𝑥 = 𝑎𝑎𝑐𝑎 și pentru șirul 𝑦 = 𝑎𝑐𝑏𝑏.
𝐹𝑖𝑟𝑠𝑡 𝐼𝑁𝐼𝑇𝐼𝐴𝐿𝐼𝑍𝐴𝑅𝐸 𝑃𝐴𝑆𝑈𝐿 1
𝜆 𝜆
# #
𝑎 𝑎
𝑏 𝑏
𝑐 𝑐
𝑆 𝑎
𝐴 𝑎
𝐵 𝑎

Inițializare.
𝐹𝑂𝐿𝐿𝑂𝑊 (𝑆) ← {#}
Repeta cat timp se adauga noi siruri
∀𝐴 → 𝛼𝐵𝛽 ∈ 𝑃, 𝐵 ∈ 𝑁, 𝛼, 𝛽 ∈ (𝑁 ∪ Σ)∗ ,
la 𝐹𝑂𝐿𝐿𝑂𝑊 (𝐵) adauga multimea 𝐹𝐼𝑅𝑆𝑇 (𝛽 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊 (𝐴))

𝑆 → 𝐴𝑏; 𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊(𝐴) 𝑎𝑑𝑎𝑢𝑔 𝐹𝐼𝑅𝑆𝑇(𝑏 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑆)) =𝑃𝐴𝑆 1 {𝑏}


𝑆 → 𝐴𝑐𝐵; 𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊(𝐴) 𝑎𝑑𝑎𝑢𝑔 𝐹𝐼𝑅𝑆𝑇(𝑐𝐵 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑆)) =𝑃𝐴𝑆 1 {𝑐}
𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊(𝐵) 𝑎𝑑𝑎𝑢𝑔 𝐹𝐼𝑅𝑆𝑇(𝜆 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝑆)) = 𝐹𝑂𝐿𝐿𝑂𝑊(𝑆) =𝑃𝐴𝑆 1 {#}
𝐴 → 𝐴𝐵; 𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊(𝐴) 𝑎𝑑𝑎𝑢𝑔 𝐹𝐼𝑅𝑆𝑇(𝐵 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝐴)) =𝑃𝐴𝑆 1 {𝑎}
𝑙𝑎 𝐹𝑂𝐿𝐿𝑂𝑊(𝐵) 𝑎𝑑𝑎𝑢𝑔 𝐹𝐼𝑅𝑆𝑇(𝜆 ⋅ 𝐹𝑂𝐿𝐿𝑂𝑊(𝐴)) = 𝐹𝑂𝐿𝐿𝑂𝑊(𝐴)

𝐹𝑂𝐿𝐿𝑂𝑊 𝐼𝑁𝐼𝑇𝐼𝐴𝐿𝐼𝑍𝐴𝑅𝐸 𝑃𝐴𝑆𝑈𝐿 1 𝑃𝐴𝑆𝑈𝐿 2


𝑆 #
𝐴 𝑏, 𝑐, 𝑎
𝐵 #, 𝑏, 𝑐, 𝑎
Multimile canonice 𝑳𝑹(𝟎):
𝑔𝑜𝑡𝑜(𝐼0 ,𝑆)
𝑆′ → . 𝑆 → 𝐼1 𝑔𝑜𝑡𝑜(𝐼2 ,𝑏)
𝑔𝑜𝑡𝑜(𝐼0 ,𝐴) 𝑆 → 𝐴. 𝑏 → 𝐼4
𝑆 →. 𝐴𝑏 → 𝐼2 𝑔𝑜𝑡𝑜(𝐼2 ,𝑐)
𝑔𝑜𝑡𝑜(𝐼0 ,𝐴) 𝑆 → 𝐴. 𝑐𝐵 → 𝐼5
𝐼0 = 𝑆 →. 𝐴𝑐𝐵 → 𝐼2 𝐼1 = [𝑆 ′ → 𝑆. ] 𝐼2 = 𝑔𝑜𝑡𝑜(𝐼2 ,𝐵)
𝑔𝑜𝑡𝑜(𝐼0 ,𝐴) 𝐴 → 𝐴. 𝐵 → 𝐼6
𝐴 →. 𝐴𝐵 → 𝐼2 𝑔𝑜𝑡𝑜(𝐼2 ,𝑎)
𝑔𝑜𝑡𝑜(𝐼0 ,𝑎) [ 𝐵 →. 𝑎 → 𝐼7 ]
[ 𝐴 →. 𝑎 → 𝐼3 ]
𝑔𝑜𝑡𝑜(𝐼5 ,𝐵)
𝑆 → 𝐴𝑐. 𝐵 → 𝐼8
𝐼3 = [𝐴 → 𝑎. ] 𝐼4 = [𝑆 → 𝐴𝑏. ] 𝐼5 = [ 𝑔𝑜𝑡𝑜(𝐼5 ,𝑎)
] 𝐼6 = [𝐴 → 𝐴𝐵. ]
𝐵 →. 𝑎 → 𝐼7
𝐼7 = [𝐵 → 𝑎. ] 𝐼8 = [𝑆 → 𝐴𝑐𝐵. ]
Mulțimile canonice împreună cu funcția 𝑔𝑜𝑡𝑜 formează un 𝐴𝐹𝐷 care recunoaște mulțimea
prefixelor viabile pentru 𝐺.
Tabela de analiza sintactica:
𝑎 𝑏 𝑐 # 𝑆 𝐴 𝐵
0 𝑠ℎ𝑖𝑓𝑡 3 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 1 2 𝑒𝑟𝑟𝑜𝑟
1 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑎𝑐𝑐𝑒𝑝𝑡 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟
2 𝑠ℎ𝑖𝑓𝑡 7 𝑠ℎ𝑖𝑓𝑡 4 𝑠ℎ𝑖𝑓𝑡 5 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 6
3 𝑟𝑒𝑑𝑢𝑐𝑒 4 𝑟𝑒𝑑𝑢𝑐𝑒 4 𝑟𝑒𝑑𝑢𝑐𝑒 4 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟
4 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑟𝑒𝑑𝑢𝑐𝑒 1 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟
5 𝑠ℎ𝑖𝑓𝑡 7 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 8
6 𝑟𝑒𝑑𝑢𝑐𝑒 3 𝑟𝑒𝑑𝑢𝑐𝑒 3 𝑟𝑒𝑑𝑢𝑐𝑒 3 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟
7 𝑟𝑒𝑑𝑢𝑐𝑒 5 𝑟𝑒𝑑𝑢𝑐𝑒 5 𝑟𝑒𝑑𝑢𝑐𝑒 5 𝑟𝑒𝑑𝑢𝑐𝑒 5 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟
8 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑟𝑒𝑑𝑢𝑐𝑒 2 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟 𝑒𝑟𝑟𝑜𝑟
Tabela nu are intrări multiple, rezultă că gramatica este de tip 𝑆𝐿𝑅(1).
Analiza șirului 𝒂𝒂𝒄𝒂:
(0, 𝑎𝑎𝑐𝑎#, 𝜆) ⊢ (𝑠ℎ𝑖𝑓𝑡 3 = 𝑎𝑐𝑡𝑖𝑜𝑛(0, 𝑎))
(0𝑎3, 𝑎𝑐𝑎#, 𝜆) ⊢ (𝑟𝑒𝑑𝑢𝑐𝑒 4: 𝐴 → 𝑎 = 𝑎𝑐𝑡𝑖𝑜𝑛(3, 𝑎))
(0𝐴2, 𝑎𝑐𝑎#, 4) ⊢ (𝑠ℎ𝑖𝑓𝑡 7 = 𝑎𝑐𝑡𝑖𝑜𝑛(2, 𝑎)) //2 = 𝑔𝑜𝑡𝑜(0, 𝐴)
(0𝐴2𝑎7, 𝑐𝑎#, 4) ⊢ (𝑟𝑒𝑑𝑢𝑐𝑒 5: 𝐵 → 𝑎 = 𝑎𝑐𝑡𝑖𝑜𝑛(7, 𝑐))
(0𝐴2𝐵6, 𝑐𝑎#, 54) ⊢ (𝑟𝑒𝑑𝑢𝑐𝑒 3: 𝐴 → 𝐴𝐵 = 𝑎𝑐𝑡𝑖𝑜𝑛(6, 𝑐)) //6 = 𝑔𝑜𝑡𝑜(2, 𝐵)
(0𝐴2, 𝑐𝑎#, 354) ⊢ (𝑠ℎ𝑖𝑓𝑡 5 = 𝑎𝑐𝑡𝑖𝑜𝑛(2, 𝑐)) //2 = 𝑔𝑜𝑡𝑜(0, 𝐴)
(0𝐴2𝑐5, 𝑎#, 354) ⊢ (𝑠ℎ𝑖𝑓𝑡 7 = 𝑎𝑐𝑡𝑖𝑜𝑛(5, 𝑎))
(0𝐴2𝑐5𝑎7, #, 354) ⊢ (𝑟𝑒𝑑𝑢𝑐𝑒 5: 𝐵 → 𝑎 = 𝑎𝑐𝑡𝑖𝑜𝑛(7, #))
(0𝐴2𝑐5𝐵8, #, 5354) ⊢ (𝑟𝑒𝑑𝑢𝑐𝑒 2: 𝑆 → 𝐴𝑐𝐵 = 𝑎𝑐𝑡𝑖𝑜𝑛(8, #)) //8 = 𝑔𝑜𝑡𝑜(5, 𝐵)
(0𝑆1, #, 25354) ⊢ 𝒂𝒄𝒄𝒆𝒑𝒕 (= 𝑎𝑐𝑡𝑖𝑜𝑛(1, #)) //1 = 𝑔𝑜𝑡𝑜(0, 𝑆)
25354 reprezintă derivarea dreaptă unică a șirului 𝑎𝑎𝑐𝑎.

Analiza șirului 𝒂𝒄𝒃𝒃:


(0, 𝑎𝑐𝑏𝑏#, 𝜆) ⊢ (𝑠ℎ𝑖𝑓𝑡 3)
(0𝑎3, 𝑐𝑏𝑏#, 𝜆) ⊢ (𝑟𝑒𝑑𝑢𝑐𝑒 4: 𝐴 → 𝑎)
(0𝐴2, 𝑐𝑏𝑏#, 4) ⊢ (𝑠ℎ𝑖𝑓𝑡 5)
(0𝐴2𝑐5, 𝑏𝑏#, 4) ⊢ 𝑒𝑟𝑟𝑜𝑟
9

1 2 3

4 5

Frunzele arborelui sunt numerotate de la stanga la dreapta cu 1, ..., 9


(pozițiile)

In stanga unui nod n este figurat Firstpos(n)

In dreapta unui nod n este figurat Lastpos(n)

Deasupra unui nod n este T(rue) sau F(alse) pentru Nullable(n)

Săgețile albastre indică succesiunea pozițiilor, Followpos


(7)

S-ar putea să vă placă și