This shows you the differences between two versions of the page.
cpl-atm:laboratoare:laborator4 [2013/11/08 13:36] laura.vasilescu created |
cpl-atm:laboratoare:laborator4 [2013/11/08 13:43] (current) laura.vasilescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | = Laborator 4 = | + | ===== Laborator 4 ===== |
+ | |||
+ | Folositi [[http://zaach.github.io/jison/try/|jison]] pentru a realiza un calculator. | ||
+ | |||
+ | Gramatica trebuie să fie următoarea: | ||
+ | <code> | ||
+ | exp -> exp operator exp | numar | ||
+ | </code> | ||
+ | |||
+ | Modificați astfel încât să generați ca output un arbore. | ||
+ | |||
+ | === Particularități === | ||
+ | |||
+ | Pentru a stabili ordinea priorităților ('a' înainte de 'b') puteți să folosiți ceva similar: | ||
+ | <code> | ||
+ | %left 'a' | ||
+ | %left 'b' | ||
+ | </code> | ||
+ | Astfel, pentru un input de genul: "c b c a d b d", arborele generat ar fi "(a (b c c) (b d d)" | ||
+ | |||
+ | ''$$'' reprezintă ce întoarce o regulă de parser. ''$i'' reprezintă al i-lea token din regulă pe care se face match (indexare de la 1). | ||
+ | |||
+ | Un arbore se creează în felul următor: | ||
+ | ''Arbore = {root: 'radacina', l: 'st', r: 'dr'}'', unde ''root'', ''l'', ''r'' reprezintă etichetele nodurilor, iar ce este după '':'' reprezintă valoarea acestora. | ||
+ | |||
+ |