SLIDE 1
Monaadilised parserid Sntaksanals ja parserid Parseri lesandeks on: - - PowerPoint PPT Presentation
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 2
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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