This is an old revision of the document!


Laborator 5

Scrieți în jison o gramatică (lexer + parser) care generează un arbore AST pentru o expresie matematică cu + și -:

expresie: numar termen;
termen: '+' numar termen | '-' numar termen |;
numar: [0-9]+;

Spre exemplu, pentru expresia 1+3, AST-ul arată astfel:

{"r":"expresie","l":[{"r":"numar","l":["1"]},{"r":"termen","l":["+",{"r":"numar","l":["3"]},null]}]}

Pentru expresia 1+3+4, arată așa:

{"r":"expresie","l":[{"r":"numar","l":["1"]},{"r":"termen","l":["+",{"r":"numar","l":["3"]},{"r":"termen","l":["+",{"r":"numar","l":["4"]},null]}]}]}

Practic, în funcție de tipul fiecărui nod, vom returna în parserul din jison ceva de genul:

{r:'expresie', l:[$numar,$termen]}
{r:'termen', l:['+',$numar,$termen]}
{r:'termen', l:['-',$numar,$termen]}
{r:'numar', l:[$numar]}

Prelucrați arborele AST și realizați adnotări de calcule intermediare pentru a evalua expresia. Pentru expresia 1+3 ar trebui să arate de forma:

{
    "r": "expresie",
    "l": [
        {
            "r": "numar",
            "l": [
                "1"
            ],
            "valoare": 1
        },
        {
            "r": "termen",
            "l": [
                "+",
                {
                    "r": "numar",
                    "l": [
                        "3"
                    ],
                    "valoare": 3
                },
                null
            ],
            "a": 1,
            "b": 3,
            "valoare": 4
        }
    ],
    "a": 1,
    "valoare": 4
}
cpl-atm/laboratoare/laborator5.1.1384516367.txt.gz · Last modified: 2013/11/15 13:52 by laura.vasilescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0