Anexa F
Gramatica utilizata pentru generatoarele
automate de analizoare sintactice
Productie | Neterminal ::=MembruDrept # |
Neterminal | identificator |
MembruDrept | Fraza | MembruDreptOpSel Fraza |
OpSel | | |
Fraza | Simbol | FrazaSimbol |
Simbol | Neterminal | Terminal |
Terminal | <CodLexical > |
CodLexical | nrBaza10 | identificator |
Pentru reprezentarea terminalelor trebuie sa se realizeze o corespondenta intre codurile lexicale adoptate pentru limbajul sursa si simbolurile care se trec intre caracterele '<' si '>'. Exista doua posibilitati in acest sens:
A. Pe post de 'CodLexical' sa se treaca valoarea numerica stabilita pentru codul lexical respectiv;Exemplu: consideram ca in fisierul de intrare pentru generatorul de analizoare sintactice avem productiile corespunzatoare neterminalelor ProgramSursa si SectiuneConst (vezi Anexa B).B. Pe post de 'CodLexical' sa se treaca un identificator, iar generatorul de analizoare sintactice sa dispuna de un tabel de corespondenta intre identificatorii respectivi si valorile numerice ale codurilor.
ProgramSursa | ::= <100> <200> <300> Bloc <301> # |
SectiuneConst | ::= <400> | <101> ListaDeclConst # |
ProgramSursa | ::= <cheiePROGRAM> <codIdentificator> <pctVirg> Bloc <punct> # |
SectiuneConst | ::= <epsilon> | <cheieCONST> ListaDeclConst # |
iar tabelul de corespondenta ar fi:
cheiePROGRAM | 100 |
codIdentificator | 200 |
pctVirg | 300 |
punct | 301 |
epsilon | 400 |
cheieCONST | 101 |
Obs:
Legenda: