Monaadilised parserid Sntaksanals ja parserid Parseri lesandeks on: - - PowerPoint PPT Presentation

monaadilised parserid
SMART_READER_LITE
LIVE PREVIEW

Monaadilised parserid Sntaksanals ja parserid Parseri lesandeks on: - - PowerPoint PPT Presentation

Monaadilised parserid Sntaksanals ja parserid Parseri lesandeks on: kontrollida kas sisendstring on sntaktiliselt korrektne; konstrueerida sisendstringile vastav AST. Parserite soovitavad omadused: BNF lhedane esitus;


slide-1
SLIDE 1

Monaadilised parserid

Süntaksanalüüs ja parserid

Parseri ülesandeks on: – kontrollida kas sisendstring on süntaktiliselt korrektne; – konstrueerida sisendstringile vastav AST. Parserite soovitavad omadused: – BNF lähedane esitus; – parserite konstrueerimine olemasolevatest parseritest; – mittedetermineeritud grammatikate kasutamine; – kontekstist sõltuvate keelte äratundmine.

slide-2
SLIDE 2

Monaadilised parserid

Parserite tüüp

newtype P❛rs❡r ❛ ❂ P ✭❙tr✐♥❣ ✦ ❬✭❛❀ ❙tr✐♥❣✮❪✮ r✉♥P ✿✿ P❛rs❡r ❛ ✦ ❙tr✐♥❣ ✦ ❬✭❛❀ ❙tr✐♥❣✮❪ r✉♥P ✭P ♣✮ ❂ ♣

Parserite monaad

instance ▼♦♥❛❞ P❛rs❡r where r❡t✉r♥ ❛ ❂ P ✩ ✕❝s ✦ ❬✭❛❀ ❝s✮❪ ♣ ❃ ❃ ❂ ❢ ❂ P ✩ ✕❝s ✦ ❝♦♥❝❛t ❬r✉♥P ✭❢ ❛✮ ❝s✵ ❥ ✭❛❀ ❝s✵✮ ✥ r✉♥P ♣ ❝s ❪

slide-3
SLIDE 3

Monaadilised parserid

Primitiivparserid

instance ▼♦♥❛❞P❧✉s P❛rs❡r where ♠③❡r♦ ❂ P ✩ ✕❝s ✦ ❬ ❪ ♠♣❧✉s ♣ q ❂ P ✩ ✕❝s ✦ r✉♥P ♣ ❝s ✰ ✰ r✉♥P q ❝s ✭❁❥❃✮ ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❛ ✦ P❛rs❡r ❛ ♣ ❁❥❃ q ❂ ♣ ❵♠♣❧✉s❵ q ✐t❡♠ ✿✿ P❛rs❡r ❈❤❛r ✐t❡♠ ❂ P ✩ ✕❝s ✦ ❬✭❤❡❛❞ ❝s❀ t❛✐❧ ❝s✮ ❥ ♥♦t ✭♥✉❧❧ ❝s✮❪

slide-4
SLIDE 4

Monaadilised parserid

Elementaarparserid

s❛t ✿✿ ✭❈❤❛r ✦ ❇♦♦❧✮ ✦ P❛rs❡r ❈❤❛r s❛t ♣ ❂ do ❢❝ ✥ ✐t❡♠❀ if ♣ ❝ then r❡t✉r♥ ❝ else ♠③❡r♦❣ ❝❤❛r ✿✿ ❈❤❛r ✦ P❛rs❡r ❈❤❛r ❝❤❛r ❝ ❂ s❛t ✭❝ ✑✮

Näide

data ❚r❡❡ ❂ ◆✐❧ ❥ ❇✐♥ ❚r❡❡ ❚r❡❡ ♣❛r❡♥s ✿✿ P❛rs❡r ❚r❡❡ ♣❛r❡♥s ❂ do ❝❤❛r ’(’ t✶ ✥ ♣❛r❡♥s ❝❤❛r ’)’ t✷ ✥ ♣❛r❡♥s r❡t✉r♥ ✭❇✐♥ t✶ t✷✮ ❁❥❃ r❡t✉r♥ ◆✐❧

slide-5
SLIDE 5

Monaadilised parserid

Iteratsioon

♠❛♥② ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❬❛ ❪ ♠❛♥② ♣ ❂ ♠❛♥②✶ ♣ ❁❥❃ r❡t✉r♥ ❬ ❪ ♠❛♥②✶ ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❬❛ ❪ ♠❛♥②✶ ♣ ❂ do ❢❛ ✥ ♣❀ ❛s ✥ ♠❛♥② ♣❀ r❡t✉r♥ ✭❛ ✿ ❛s✮❣

slide-6
SLIDE 6

Lihtsaid parsereid

Võtmesõnad

str✐♥❣ ✿✿ ❙tr✐♥❣ ✦ P❛rs❡r ❙tr✐♥❣ str✐♥❣ "" ❂ r❡t✉r♥ "" str✐♥❣ ✭❝ ✿ ❝s✮ ❂ do ❢❝❤❛r ❝❀ str✐♥❣ ❝s❀ r❡t✉r♥ ✭❝ ✿ ❝s✮❣

Identifikaatorid

✐❞❡♥t✐☞❡r ✿✿ P❛rs❡r ❙tr✐♥❣ ✐❞❡♥t✐☞❡r ❂ do ❝ ✥ ❧♦✇❡r ❝s ✥ ♠❛♥② ❛❧♣❤❛♥✉♠ r❡t✉r♥ ✭❝ ✿ ❝s✮

slide-7
SLIDE 7

Lihtsaid parsereid

Naturaalarvud

♥❛t✉r❛❧ ✿✿ P❛rs❡r ■♥t ♥❛t✉r❛❧ ❂ do ❞s ✥ ♠❛♥②✶ ❞✐❣✐t r❡t✉r♥ ✭❢♦❧❞❧✶ ✭✕❛ ❜ ✦ ✶✵ ✄ ❛ ✰ ❜✮ ❞s✮ ❞✐❣✐t ✿✿ P❛rs❡r ■♥t ❞✐❣✐t ❂ do ❝ ✥ s❛t ✐s❉✐❣✐t r❡t✉r♥ ✭♦r❞ ❝ ♦r❞ ’0’✮

Täisarvud

✐♥t❡❣❡r ✿✿ P❛rs❡r ■♥t ✐♥t❡❣❡r ❂ do ❢❝❤❛r ’-’❀ ♥ ✥ ♥❛t✉r❛❧❀ r❡t✉r♥ ✭♥✮❣ ❁❥❃ ♥❛t✉r❛❧

slide-8
SLIDE 8

Lihtsaid parsereid

Reaalarvud

✌♦❛t✐♥❣ ✿✿ P❛rs❡r ❉♦✉❜❧❡ ✌♦❛t✐♥❣ ❂ do ✐ ✥ ✐♥t❡❣❡r ❢ ✥ ❢r❛❝t✐♦♥ ❁❥❃ r❡t✉r♥ ✵ r❡t✉r♥ ✭❢r♦♠■♥t❡❣r❛❧ ✐ ✰ ❢ ✮ ❢r❛❝t✐♦♥ ✿✿ P❛rs❡r ❉♦✉❜❧❡ ❢r❛❝t✐♦♥ ❂ do ❝❤❛r ’.’ ❞s ✥ ♠❛♥②✶ ❞✐❣✐t r❡t✉r♥ ✭❢♦❧❞r ♦♣ ✵ ❞s✮ where ❞ ❵♦♣❵ ① ❂ ✭① ✰ ❢r♦♠■♥t❡❣r❛❧ ❞✮ ❂ ✶✵

slide-9
SLIDE 9

Lihtsaid parsereid

Tühisümbolid

s♣❛❝❡ ✿✿ P❛rs❡r ❙tr✐♥❣ s♣❛❝❡ ❂ ♠❛♥② ✭s❛t ✐s❙♣❛❝❡✮ t♦❦❡♥ ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❛ t♦❦❡♥ ♣ ❂ do ❢❛ ✥ ♣❀ s♣❛❝❡❀ r❡t✉r♥ ❛ ❣ ❦❡②❝ ❝ ❂ t♦❦❡♥ ✭❝❤❛r ❝✮ ❦❡②✇ ❝s ❂ t♦❦❡♥ ✭str✐♥❣ ❝s✮ ✐❞❡♥t ❂ t♦❦❡♥ ✐❞❡♥t✐☞❡r ♥❛t ❂ t♦❦❡♥ ♥❛t✉r❛❧ ✐♥t ❂ t♦❦❡♥ ✐♥t❡❣❡r ✌♦❛t ❂ t♦❦❡♥ ✌♦❛t✐♥❣

slide-10
SLIDE 10

Parserite transformaatorid

Sulud

♣❛❝❦ ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❜ ✦ P❛rs❡r ❝ ✦ P❛rs❡r ❜ ♣❛❝❦ s✶ ♣ s✷ ❂ do ❢s✶❀ ① ✥ ♣❀ s✷❀ r❡t✉r♥ ① ❣

Näide

♣❛r❡♥ ♣ ❂ ♣❛❝❦ ✭❦❡②❝ ’(’✮ ♣ ✭❦❡②❝ ’)’✮ ❜r❛❝❦ ♣ ❂ ♣❛❝❦ ✭❦❡②❝ ’[’✮ ♣ ✭❦❡②❝ ’]’✮ ❜❧♦❝❦ ♣ ❂ ♣❛❝❦ ✭❦❡②✇ "begin"✮ ♣ ✭❦❡②✇ "end"✮

slide-11
SLIDE 11

Parserite transformaatorid

Eraldajaga jadad

s❡♣❜② ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❜ ✦ P❛rs❡r ❬❛ ❪ ♣ ❵s❡♣❜②❵ s❡♣ ❂ ✭♣ ❵s❡♣❜②✶❵ s❡♣✮ ❁❥❃ r❡t✉r♥ ❬ ❪ s❡♣❜②✶ ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❜ ✦ P❛rs❡r ❬❛ ❪ ♣ ❵s❡♣❜②✶❵ s❡♣ ❂ do ❛ ✥ ♣ ❛s ✥ ♠❛♥② ✭s❡♣ ❃ ❃ ♣✮ r❡t✉r♥ ✭❛ ✿ ❛s✮

Näide

❝♦♠♠❛▲✐st ♣ ❂ s❡♣❜② ♣ ✭❦❡②✇ ","✮ s❡♠✐❝▲✐st ♣ ❂ s❡♣❜② ♣ ✭❦❡②✇ ";"✮

slide-12
SLIDE 12

Aritmeetilised avaldised

Grammatika

❡①♣r ❂ ✐♥t ❥ ❡①♣r ✰ ❡①♣r ❥ ❡①♣r ❡①♣r ❥ ❡①♣r ✄ ❡①♣r ❥ ❡①♣r ❂ ❡①♣r ❥ ❡①♣r ^ ❡①♣r ❥ ✭❡①♣r✮

Abstraktne süntaksipuu

data ❊①♣r ❂ ❈♦♥ ■♥t ❥ ❊①♣r ✿✰✿ ❊①♣r ❥ ❊①♣r ✿✿ ❊①♣r ❥ ❊①♣r ✿✄✿ ❊①♣r ❥ ❊①♣r ✿❂✿ ❊①♣r ❥ ❊①♣r ✿^✿ ❊①♣r

slide-13
SLIDE 13

Aritmeetilised avaldised

Parser ver. 0

❡①♣r✵ ❂ do ❢❡✵ ✥ ❡①♣r✵❀ ❦❡②❝ ’+’❀ ❡✶ ✥ ❡①♣r✵❀ r❡t✉r♥ ✭❡✵ ✿✰✿ ❡✶✮❣ ❁❥❃ do ❢❡✵ ✥ ❡①♣r✵❀ ❦❡②❝ ’-’❀ ❡✶ ✥ ❡①♣r✵❀ r❡t✉r♥ ✭❡✵ ✿✿ ❡✶✮❣ ❁❥❃ ✿✿✿ ❁❥❃ do ❢❡✵ ✥ ❡①♣r✵❀ ❦❡②❝ ’^’❀ ❡✶ ✥ ❡①♣r✵❀ r❡t✉r♥ ✭❡✵ ✿^✿ ❡✶✮❣ ❁❥❃ do ❢✐ ✥ ✐♥t❀ r❡t✉r♥ ✭❈♦♥ ✐✮❣ ❁❥❃ ♣❛r❡♥ ❡①♣r✵

NB!

Ei tööta kuna grammatika on vasakrekursiivne!!

slide-14
SLIDE 14

Aritmeetilised avaldised

Parser ver. 1

❡①♣r✶ ❂ do ❛ ✥ ❛t♦♠✶ ♦♣ ✥ ♦♣❡r✶ ❡ ✥ ❡①♣r✶ r❡t✉r♥ ✭❛ ❵♦♣❵ ❡✮ ❁❥❃ ❛t♦♠✶ ♦♣❡r✶ ❂ ✭❦❡②❝ ’+’ ❃ ❃ r❡t✉r♥ ✭✿✰✿✮✮ ❁❥❃ ✭❦❡②❝ ’-’ ❃ ❃ r❡t✉r♥ ✭✿✿✮✮ ❁❥❃ ✭❦❡②❝ ’*’ ❃ ❃ r❡t✉r♥ ✭✿✄✿✮✮ ❁❥❃ ✭❦❡②❝ ’/’ ❃ ❃ r❡t✉r♥ ✭✿❂✿✮✮ ❁❥❃ ✭❦❡②❝ ’^’ ❃ ❃ r❡t✉r♥ ✭✿^✿✮✮ ❛t♦♠✶ ❂ do ❢✐ ✥ ✐♥t❀ r❡t✉r♥ ✭❈♦♥ ✐✮❣ ❁❥❃ ♣❛r❡♥ ❡①♣r✶

slide-15
SLIDE 15

Parserite transformaatorid

Eraldajaga jadad

❝❤❛✐♥❧ ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ✭❛ ✦ ❛ ✦ ❛✮ ✦ P❛rs❡r ❛ ❝❤❛✐♥❧ ♣ s ❂ do ① ✥ ♣ ②s ✥ ♠❛♥② ✭do ❢♦♣ ✥ s❀ ② ✥ ♣❀ r❡t✉r♥ ✭♦♣❀ ②✮❣✮ r❡t✉r♥ ✭❢♦❧❞❧ ✭✕❛ ✭♦♣❀ ②✮ ✦ ❛ ❵♦♣❵ ②✮ ① ②s✮ ❝❤❛✐♥r ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ✭❛ ✦ ❛ ✦ ❛✮ ✦ P❛rs❡r ❛ ❝❤❛✐♥r ♣ s ❂ do ②s ✥ ♠❛♥② ✭do ❢② ✥ ♣❀ ♦♣ ✥ s❀ r❡t✉r♥ ✭②❀ ♦♣✮❣✮ ① ✥ ♣ r❡t✉r♥ ✭❢♦❧❞r ✭✕✭②❀ ♦♣✮ ❜ ✦ ② ❵♦♣❵ ❜✮ ① ②s✮

slide-16
SLIDE 16

Aritmeetilised avaldised

Parser ver. 2

❡①♣r✷ ✿✿ P❛rs❡r ❊①♣r ❡①♣r✷ ❂ ❝❤❛✐♥❧ t❡r♠✷ ✭ ✭❦❡②❝ ’+’ ❃ ❃ r❡t✉r♥ ✭✿✰✿✮✮ ❁❥❃ ✭❦❡②❝ ’-’ ❃ ❃ r❡t✉r♥ ✭✿✿✮✮✮ t❡r♠✷ ✿✿ P❛rs❡r ❊①♣r t❡r♠✷ ❂ ❝❤❛✐♥❧ ❢❛❝t✷ ✭ ✭❦❡②❝ ’*’ ❃ ❃ r❡t✉r♥ ✭✿✄✿✮✮ ❁❥❃ ✭❦❡②❝ ’/’ ❃ ❃ r❡t✉r♥ ✭✿❂✿✮✮✮ ❢❛❝t✷ ✿✿ P❛rs❡r ❊①♣r ❢❛❝t✷ ❂ ❝❤❛✐♥r ❛t♦♠✷ ✭❦❡②❝ ’^’ ❃ ❃ r❡t✉r♥ ✭✿^✿✮✮ ❛t♦♠✷ ✿✿ P❛rs❡r ❊①♣r ❛t♦♠✷ ❂ do ❢✐ ✥ ✐♥t❀ r❡t✉r♥ ✭❈♦♥ ✐✮❣ ❁❥❃ ♣❛r❡♥ ❡①♣r✷

slide-17
SLIDE 17

Aritmeetilised avaldised

Aritmeetiliste avaldiste väärtustaja

❡①♣r✸ ✿✿ P❛rs❡r ■♥t ❡①♣r✸ ❂ ❝❤❛✐♥❧ t❡r♠✸ ✭ ✭❦❡②❝ ’+’ ❃ ❃ r❡t✉r♥ ✭✰✮✮ ❁❥❃ ✭❦❡②❝ ’-’ ❃ ❃ r❡t✉r♥ ✭✮✮✮ t❡r♠✸ ✿✿ P❛rs❡r ■♥t t❡r♠✸ ❂ ❝❤❛✐♥❧ ❢❛❝t✸ ✭ ✭❦❡②❝ ’*’ ❃ ❃ r❡t✉r♥ ✭✄✮✮ ❁❥❃ ✭❦❡②❝ ’/’ ❃ ❃ r❡t✉r♥ ❞✐✈✮✮ ❢❛❝t✸ ✿✿ P❛rs❡r ■♥t ❢❛❝t✸ ❂ ❝❤❛✐♥r ❛t♦♠✸ ✭❦❡②❝ ’^’ ❃ ❃ r❡t✉r♥ ✭^✮✮ ❛t♦♠✸ ✿✿ P❛rs❡r ■♥t ❛t♦♠✸ ❂ ✐♥t ❁❥❃ ♣❛r❡♥ ❡①♣r✸

slide-18
SLIDE 18

Monaadilised parserid

Efektiivsust parandavaid kombinaatoreid

☞rst ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❛ ☞rst ♣ ❂ P ✩ ✕❝s ✦ case r✉♥P ♣ ❝s of ❬ ❪ ✦ ❬ ❪ ✭① ✿ ①s✮ ✦ ❬① ❪ ✭❁❥❃✮ ✿✿ P❛rs❡r ❛ ✦ P❛rs❡r ❛ ✦ P❛rs❡r ❛ ♣ ❁❥❃ q ❂ ☞rst ✭♣ ❵♠♣❧✉s❵ q✮

Kogu sisendi parsimine

♣❛rs❡ ✿✿ P❛rs❡r ❛ ✦ ❙tr✐♥❣ ✦ ❛ ♣❛rs❡ ♣ ❝s ❂ case r✉♥P ✭☞rst ✭s♣❛❝❡ ❃ ❃ ♣✮✮ ❝s of ❬✭①❀ ""✮❪ ✦ ① ✦ ❡rr♦r "Parse error"