You are on page 1of 8

Vežba I

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


na novi red

You might also like