Kreirati jflex specifikaciju za generisanje leksičkog analizatora jezika koji je definisan
sledećom gramatikom:
Grupa 1:
Program → program ID Block
Block → begin VarSection StatementList end VarSection→ VarSection VarDecl | VarDecl VarDecl → Type NameList; NameList → NameList , ID | ID Type → int | real | boolean StatementList → StatementList ; Statement | Statement Statement → for ( Expression, Expression, Expression ) Statement | Assignment | read( NameList ) | write ( ExpressionList ) | Block Assignement → ID = Expression Expression → Expression OR AndExpression | AndExpression AndExpression → AndExpression AND RelExpression | RelExpression RelExpression → ArExpression RelOp ArExpression | ArExpression RelOp → < | <= | == | <> | > | >= ArExpression → ArExpression + Term | ArExpression - Term | Term Term → Term * Factor | Term / Factor | Factor Factor → ID | CONST | ( Expression ) ExpressionList → ExpressionList , Expression | Expression
Terminalni simbol ID u ovom programskom jeziku označava identifikator (niz slova i
cifara u kojem prvi znak ne može da bude cifra), a simbol CONST konstantu koja moze da bude zadata u jednom od sledećih formata: 1. Konstante tipa int: [<oznaka_osnove>]<niz_cifara_zadate_osnove> Pri čemu oznaka osnove može biti 0 – za brojni sistem sa osnovom 8, 0x – za brojni sistem sa osnovom 16, Ukoliko je oznaka osnove izostavljena, podrazumeva se osnova 10. 2. Konstante tipa real: 0. <niz_cifara>[E[±]<niz_cifara>] 3. Konstante tipa boolean: TRUE ili FALSE
Komentari u ovom programskom jeziku počinju simbolom // i završavaju se prelazom
na novi red. Grupa 2:
Program → main ( ) Block
Block → { VarList StatementList } VarList → VarList VarDecl | VarDecl VarDecl → NameList : Type; NameList → NameList , ID | ID Type → int | char | real | bool StatementList → StatementList Statement | Statement Statement → do Statement while Expression | ID = Expression ; | read( ID ) ; | write ( Expression ) ; | Block Expression → Expression || AndExpression | AndExpression AndExpression → AndExpression && RelExpression | RelExpression RelExpression → ArExpression RelOp ArExpression | ArExpression RelOp → < | <= | == | != | > | >= ArExpression → ArExpression + Term | ArExpression - Term | Term Term → Term * Factor | Term / Factor | Factor Factor → ID | CONST | ( Expression )
Terminalni simbol ID u ovom programskom jeziku označava identifikator (niz slova,
cifara, i ’_’ u kojem prvi znak ne može da bude cifra), a simbol CONST konstantu koja moze da bude zadata u jednom od sledećih formata: 1. Konstante tipa int: [$]<niz_cifara_zadate_osnove> Pri čemu ako je znak $ naveden radi se o osnovi 16, a ukoliko nije naveden podrazumeva se osnova 10. 2. Konstante tipa real: <niz_cifara>.[<niz_cifara>][E[±]<niz_cifara>] ili . <niz_cifara>[E[±]<niz_cifara>] 3. Konstante tipa char: ’<znak>’ 4. Konstante tipa bool: true i false
Komentari u ovom programskom jeziku počinju simbolom -- i završavaju se
simbolom --. Grupa 3:
Program → main ( ) Block
Block → { VarList StatementList } VarList → VarList VarDecl | VarDecl VarDecl → NameList : Type; NameList → NameList , ID | ID Type → int | char | real | bool StatementList → StatementList Statement | Statement Statement → repeat StatementList until Expression; | ID = Expression ; | read( NameList ) ; | write ( ExpressionList ) ; | Block Expression → Expression || AndExpression | AndExpression AndExpression → AndExpression && RelExpression | RelExpression RelExpression → ArExpression RelOp ArExpression | ArExpression RelOp → < | <= | == | != | > | >= ArExpression → ArExpression + Term | ArExpression - Term | Term Term → Term * Factor | Term / Factor | Factor Factor → ID | CONST | ( Expression ) ExpressionList → ExpressionList , Expression | Expression
Terminalni simbol ID u ovom programskom jeziku označava identifikator (niz slova,
cifara, i ’_’ u kojem prvi znak ne može da bude cifra), a simbol CONST konstantu koja moze da bude zadata u jednom od sledećih formata: 1. Konstante tipa int: [$]<niz_cifara_zadate_osnove> Pri čemu ako je znak $ naveden radi se o osnovi 16, a ukoliko nije naveden podrazumeva se osnova 10. 2. Konstante tipa real: <niz_cifara>.[<niz_cifara>][E[±]<niz_cifara>] 3. Konstante tipa char: ’<znak>’ 4. Konstante tipa bool: true i false
Komentari u ovom programskom jeziku počinju simbolom (* i završavaju se
simbolom *) Grupa 4:
Program → main ( ) Block
Block → { VarSection StatementList } VarSection → VarSection VarDecl | VarDecl VarDecl → Type NameList ; NameList → NameList , Name | Name Name → ID DimList DimList → DimList Dimenssion | ε Dimenssion → [ CONST ] Type → int | char | real StatementList → StatementList Statement | Statement Statement → for (Type ID in ID ) Statement | Variable = Expression ; | read( VarList ) ; | write ( ExpressionList ) ; | Block Expression → Expression + Term | Expression - Term | Term Term → Term * Factor | Term / Factor | Factor Factor → Variable | CONST | ( Expression ) Variable → ID IndexList IndexList → IndexList Index | ε Index → [ Expression ] VarList → VarList , Variable | Variable ExpressionList → ExpressionList , Expression | Expression
Terminalni simbol ID u ovom programskom jeziku označava identifikator (niz slova i
cifara u kojem prvi znak ne može da bude cifra), a simbol CONST konstantu koja moze da bude zadata u jednom od sledećih formata: 1. Konstante tipa int: [[<osnova>]#]<niz_cifara_zadate_osnove> Pri čemu osnova može da bude u opsegu 2-16. Ukoliko je osnova izostavljena podrazumeva se 16, a ukoliko je i simbol ’#’ izostavljen, podrazumeva se osnova 10. 2. Konstante tipa real: <niz_cifara>.[<niz_cifara>][E[±]<niz_cifara>] 3. Konstante tipa char: ’<znak>’
Komentari u ovom programskom jeziku počinju simbolom /** i završavaju se
simbolom */ Grupa 5:
Program → program ID Block
Block → begin VarSection StatementList end VarSection→ VarSection VarDecl | VarDecl VarDecl → Type NameList; NameList → NameList , ID | ID Type → int | char | real StatementList → StatementList Statement | Statement Statement → for Assignment to Expression by CONST Statement | for Assignment downto Expression by CONST Statement | Assignment; | read( NameList ) ; | write ( ExpressionList ) ; | Block Assignement → ID = Expression Expression → Expression AddOperator Term | Term AddOperator → + | - Term → Term MulOperator Factor | Factor MulOperator → * | / | mod Factor → ID | CONST | ( Expression ) ExpressionList → ExpressionList , Expression | Expression
Terminalni simbol ID u ovom programskom jeziku označava identifikator (niz slova i
cifara u kojem prvi znak ne može da bude cifra), a simbol CONST konstantu koja moze da bude zadata u jednom od sledećih formata: 1. Konstante tipa int: [<oznaka_osnove>]<niz_cifara_zadate_osnove> Pri čemu oznaka osnove može biti 0 – za brojni sistem sa osnovom 8, 0x – za brojni sistem sa osnovom 16, Ukoliko je oznaka osnove izostavljena, podrazumeva se osnova 10. 2. Konstante tipa real: <niz_cifara>.[<niz_cifara>][E[±]<niz_cifara>] ili . <niz_cifara>[E[±]<niz_cifara>] 3. Konstante tipa char: ’<znak>’
Komentari u ovom programskom jeziku počinju simbolom (* i završavaju se
simbolom *) Grupa 6:
Program → program ID Block
Block → begin VarSection StatementList end VarSection→ VarSection VarDecl | VarDecl VarDecl → Type NameList ; NameList → NameList , ID | ID Type → int | char | real StatementList → StatementList Statement | Statement Statement → SwitchStatement | Assignment; | read( NameList ) ; | write ( ExpressionList ) ; | Block SwitchStatement → SWITCH ( Expression ) { AlternativeList } AlternativeList → AlternativeList Alternative | Alternative Alternative → CASE CONST : StatementList Assignement → ID = Expression Expression → Expression AddOperator Term | Term AddOperator → + | - Term → Term MulOperator Factor | Factor MulOperator → * | / | mod Factor → ID | CONST | ( Expression ) ExpressionList → ExpressionList , Expression | Expression
Terminalni simbol ID u ovom programskom jeziku označava identifikator (niz slova i
cifara u kojem prvi znak ne može da bude cifra), a simbol CONST konstantu koja moze da bude zadata u jednom od sledećih formata: 1. Konstante tipa int: [<oznaka_osnove>]<niz_cifara_zadate_osnove> Pri čemu oznaka osnove može biti 0 – za brojni sistem sa osnovom 8, 0x – za brojni sistem sa osnovom 16, Ukoliko je oznaka osnove izostavljena, podrazumeva se osnova 10. 2. Konstante tipa real: 0. <niz_cifara>[E[±]<niz_cifara>] 3. Konstante tipa char: ’<znak>’
Komentari u ovom programskom jeziku počinju simbolom /** i završavaju se
simbolom */ Grupa 7:
Program → main ( ) Block
Block → { VarSection StatementList } VarSection → VarSection VarDecl | VarDecl VarDecl → Type NameList ; NameList → NameList , Name | Name Name → ID DimList DimList → DimList Dimenssion | ε Dimenssion → [ CONST ] Type → int | char | real StatementList → StatementList Statement | Statement Statement → CaseStatement | Variable = Expression ; | read( VarList ) ; | write ( ExpressionList ) ; | Block CaseStatement → CASE Expression OF AlternativeList END AlternativeList → AlternativeList ; Alternative | Alternative Alternative → CONST : Statement Expression → Expression AddOperator Term | Term AddOperator → + | - Term → Term MulOperator Factor | Factor MulOperator → * | / Factor → Variable | CONST | ( Expression ) Variable → ID IndexList IndexList → IndexList Index | ε Index → [ Expression ] VarList → VarList , Variable | Variable ExpressionList → ExpressionList , Expression | Expression
Terminalni simbol ID u ovom programskom jeziku označava identifikator (niz slova i
cifara u kojem prvi znak ne može da bude cifra), a simbol CONST konstantu koja moze da bude zadata u jednom od sledećih formata: 1. Konstante tipa int: [[<osnova>]#]<niz_cifara_zadate_osnove> Pri čemu osnova može da bude u opsegu 2-16. Ukoliko je osnova izostavljena podrazumeva se 16, a ukoliko je i simbol ’#’ izostavljen, podrazumeva se osnova 10. 2. Konstante tipa real: <niz_cifara>.[<niz_cifara>][E[±]<niz_cifara>] 3. Konstante tipa char: ’<znak>’
Komentari u ovom programskom jeziku počinju simbolom -- i završavaju se
simbolom --. Grupa 8:
Program → main ( ) Block
Block → { VarList StatementList } VarList → VarList VarDecl | VarDecl VarDecl → NameList : Type ; NameList → NameList , ID | ID Type → int | char | real | bool StatementList → StatementList Statement | Statement Statement → Loop | ID = Expression ; | read ( NameList ) ; | write ( ExpressionList ) ; | Block Loop → while ( Expression ) Statement Expression → Expression || AndExpression | AndExpression AndExpression → AndExpression && RelExpression | RelExpression RelExpression → ArExpression RelOp ArExpression | ArExpression RelOp → < | <= | == | != | > | >= ArExpression → ArExpression + Term | ArExpression - Term | Term Term → Term * Factor | Term / Factor | Factor Factor → ID | CONST | ( Expression ) ExpressionList → ExpressionList , Expression | Expression
Terminalni simbol ID u ovom programskom jeziku označava identifikator (niz slova,
cifara, i ’_’ u kojem prvi znak ne može da bude cifra), a simbol CONST konstantu koja moze da bude zadata u jednom od sledećih formata: 1. Konstante tipa int: [$]<niz_cifara_zadate_osnove> Pri čemu ako je znak $ naveden radi se o osnovi 16, a ukoliko nije naveden podrazumeva se osnova 10. 2. Konstante tipa real: 0.<niz_cifara>[E[±]<niz_cifara>] 3. Konstante tipa char: ’<znak>’ 4. Konstante tipa bool: true i false
Komentari u ovom programskom jeziku počinju simbolom // i završavaju se prelazom