%option noyywrap yylineno %{ #include #include "semantic.tab.h" #include "defs.h" int c; extern YYSTYPE yylval; %} %% [ \t\n]+ { /* skip */ } "void" { yylval.i = VOID; return _TYPE; } "int" { yylval.i = INT; return _TYPE; } "unsigned" { yylval.i = UINT; return _TYPE; } "if" { return _IF; } "else" { return _ELSE; } "return" { return _RETURN; } "hana" { return _HANA; } "loop" { return _LOOP; } "hopau" { return _HOPAU; } "oiai" { return _OIAI; } "switch" { return _SWITCH; } "case" { return _CASE; } "break" { return _BREAK; } "default" { return _DEFAULT; } "end_switch" { return _END_SWITCH; } "" { return _ZATVORENO; } "(" { return _LPAREN; } ")" { return _RPAREN; } "{" { return _LBRACKET; } "}" { return _RBRACKET; } ";" { return _SEMICOLON; } "=" { return _ASSIGN; } "," { return _COMMA; } "++" { return _INC; } "*" { yylval.i = MUL; return _AROP; } "/" { yylval.i = DIV; return _AROP; } "+" { yylval.i = ADD; return _AROP; } "-" { yylval.i = SUB; return _AROP; } "<" { yylval.i = LT; return _RELOP; } ">" { yylval.i = GT; return _RELOP; } "<=" { yylval.i = LE; return _RELOP; } ">=" { yylval.i = GE; return _RELOP; } "==" { yylval.i = EQ; return _RELOP; } "!=" { yylval.i = NE; return _RELOP; } "//".* {} [a-zA-Z][a-zA-Z0-9]* { yylval.s = strdup(yytext); return _ID; } [+-]?[0-9]{1,10} { yylval.s = strdup(yytext); return _INT_NUMBER;} [0-9]{1,10}[uU] { yylval.s = strdup(yytext); yylval.s[yyleng-1] = 0; return _UINT_NUMBER;} "/*" { for (;;) { while ((c = input()) != '*' && c != EOF) ; /* preskoci tekst komentara */ if (c == '*') { while ((c = input()) == '*') ; if (c == '/') break; /* kraj komentara */ } if (c == EOF) { err("EOF in comment"); break; } } } . { printf("line %d: LEXICAL ERROR on char %c\n", yylineno, *yytext);} %%