Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // import sekcija
- %%
- // sekcija opcija i deklaracija
- %class MPLexer
- %function next_token
- %line
- %column
- %debug
- %type Yytoken
- %eofval{
- return new Yytoken( sym.EOF, null, yyline, yycolumn);
- %eofval}
- %{
- //dodatni clanovi generisane klase
- KWTable kwTable = new KWTable();
- Yytoken getKW()
- {
- return new Yytoken( kwTable.find( yytext() ),
- yytext(), yyline, yycolumn );
- }
- %}
- //stanja
- %xstate KOMENTAR
- //makroi
- slovo = [a-zA-Z]
- cifra = [0-9]
- oc16 = [0-9A-F]
- %%
- // pravila
- "//" { yybegin( KOMENTAR ); }
- <KOMENTAR>~[\n\r] { yybegin( YYINITIAL ); }
- [\t\n\r ] { ; }
- \( { return new Yytoken( sym.LEFTPAR, yytext(), yyline, yycolumn ); }
- \) { return new Yytoken( sym.RIGHTPAR, yytext(), yyline, yycolumn ); }
- \{ { return new Yytoken( sym.LCURLY, yytext(), yyline, yycolumn ); }
- \} { return new Yytoken( sym.RCURLY, yytext(), yyline, yycolumn ); }
- // operatori
- && { return new Yytoken( sym.AND,yytext(), yyline, yycolumn ); }
- \|\| { return new Yytoken( sym.OR,yytext(), yyline, yycolumn ); }
- \+ { return new Yytoken( sym.PLUS,yytext(), yyline, yycolumn ); }
- \* { return new Yytoken( sym.MUL,yytext(), yyline, yycolumn ); }
- \- { return new Yytoken( sym.MIN,yytext(), yyline, yycolumn ); }
- \/ { return new Yytoken( sym.DIV,yytext(), yyline, yycolumn ); }
- \< { return new Yytoken( sym.LESS,yytext(), yyline, yycolumn ); }
- \<= { return new Yytoken( sym.LESSE,yytext(), yyline, yycolumn ); }
- \> { return new Yytoken( sym.GREAT,yytext(), yyline, yycolumn ); }
- \>= { return new Yytoken( sym.GREATE,yytext(), yyline, yycolumn ); }
- == { return new Yytoken( sym.EQ,yytext(), yyline, yycolumn ); }
- \!= { return new Yytoken( sym.NEQ,yytext(), yyline, yycolumn ); }
- // separatori
- ; { return new Yytoken( sym.DOTCOMMA, yytext(), yyline, yycolumn ); }
- , { return new Yytoken( sym.COMMA, yytext(), yyline, yycolumn ); }
- = { return new Yytoken( sym.ASSIGN, yytext(), yyline, yycolumn ); }
- //kljucne reci
- {slovo}+ { return getKW(); }
- //"main" { return new Yytoken( sym.MAIN, yytext(), yyline, yycolumn );}
- //"char" { return new Yytoken( sym.CHAR, yytext(), yyline, yycolumn );}
- // "int" { return new Yytoken( sym.INT, yytext(), yyline, yycolumn ); }
- // "real" { return new Yytoken( sym.REAL, yytext(), yyline, yycolumn );}
- // "bool" { return new Yytoken( sym.BOOL, yytext(), yyline, yycolumn );}
- // "read" { return new Yytoken( sym.READ, yytext(), yyline, yycolumn );}
- // "write" { return new Yytoken( sym.WRITE, yytext(), yyline, yycolumn );}
- // "while" { return new Yytoken( sym.WHILE, yytext(), yyline, yycolumn );}
- //konstante
- {cifra}+ { return new Yytoken( sym.CONST, yytext(), yyline, yycolumn ); }
- //real
- 0+\.{cifra}+(E[+-]{cifra}*)? { return new Yytoken( sym.CONST,yytext(), yyline, yycolumn ); }
- //int
- \${oc16}+ { return new Yytoken( sym.CONST, yytext(), yyline, yycolumn); }
- {cifra}+ { return new Yytoken( sym.CONST, yytext(), yyline, yycolumn); }
- //bool
- "true"|"false" { return new Yytoken(sym.CONST, yytext(), yyline, yycolumn); }
- //ID (prvo slovo ili _ a zatim proizvoljan broj slova i cifara)
- ({slovo} | "_")+ ({slovo}|{cifra}|"_")* { return new Yytoken(sym.ID, yytext(),yyline, yycolumn ); }
- //char
- '[^]' { return new Yytoken( sym.CONST,yytext(), yyline, yycolumn ); }
- //obrada gresaka
- . { if (yytext() != null && yytext().length() > 0) System.out.println( "ERROR: " + yytext() ); }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement