%x comment %{ #define C_LITERAL 1 #define C_IDENTIF 2 #define C_DELIMIT 3 #define C_COMMENT 4 #define S_BOOLEAN 1 #define S_INTEGER 2 #define S_FLOAT 3 #define S_STRING 4 #define S_RESWORD 5 #define V_FALSE 0 #define V_TRUE 1 #define V_NULL 2 #define V_EMPTY 3 %} void my_tok(int class, int subclass, int valuecode, char* text) { printf("%d, %d, %d,%s\n", class, subclass, valuecode, text); } %% /* literals */ true my_tok(C_LITERAL, S_BOOLEAN, V_TRUE, yytext); false my_tok(C_LITERAL, S_BOOLEAN, V_FALSE, yytext); null my_tok(C_LITERAL, S_BOOLEAN, V_NULL, yytext); [0-9]+ my_tok(C_LITERAL, S_INTEGER, 0, yytext); [0-9]+e[+\-]?[0-9]+ my_tok(C_LITERAL, S_FLOAT, 0, yytext); [0-9]+"."[0-9]*(e[+\-]?[0-9]+)? my_tok(C_LITERAL, S_FLOAT, 0, yytext); "."[0-9]+(e[+\-]?[0-9]+)? my_tok(C_LITERAL, S_FLOAT, 0, yytext); '' my_tok(C_LITERAL, S_STRING, V_EMPTY, yytext); '(('')|[^'])*' printf("Class: Literal, Subclass: String, Value: %s\n", yytext); /* identifiers */ select printf("\n\n\nClass: Identificator, Subclass: SELECT reserved word\n"); [a-z][a-z0-9$_#]* printf("Class: Identifikator, Value: %s\n", yytext); \"[^"]*\" printf("Class: Identifikator, Subclass: Quoted: %s\n", yytext); /* delimiters */ ":=" printf("Class: Delimiter, Value: ASSIGNMENT\n"); "=>" printf("Class: Delimiter, Value: ASSOTIATION\n"); "||" printf("Class: Delimiter, Value: CONCATENATION\n"); "**" printf("Class: Delimiter: %s\n", yytext); "<<" printf("Class: Delimiter: %s\n", yytext); ">>" printf("Class: Delimiter: %s\n", yytext); ".." printf("Class: Delimiter: %s\n", yytext); "<>" printf("Class: Delimiter: %s\n", yytext); "!=" printf("Class: Delimiter: %s\n", yytext); "~=" printf("Class: Delimiter: %s\n", yytext); "^=" printf("Class: Delimiter: %s\n", yytext); "<=" printf("Class: Delimiter: %s\n", yytext); ">=" printf("Class: Delimiter: %s\n", yytext); "+" printf("Class: Delimiter: %s\n", yytext); "%" printf("Class: Delimiter: %s\n", yytext); "." printf("Class: Delimiter: %s\n", yytext); "/" printf("Class: Delimiter: %s\n", yytext); "(" printf("Class: Delimiter: %s\n", yytext); ")" printf("Class: Delimiter: %s\n", yytext); ":" printf("Class: Delimiter: %s\n", yytext); "," printf("Class: Delimiter: %s\n", yytext); "*" printf("Class: Delimiter: %s\n", yytext); "=" printf("Class: Delimiter: %s\n", yytext); "<" printf("Class: Delimiter: %s\n", yytext); ">" printf("Class: Delimiter: %s\n", yytext); "@" printf("Class: Delimiter: %s\n", yytext); ";" printf("Class: Delimiter: %s\n", yytext); "-" printf("Class: Delimiter: %s\n", yytext); /* comments */ --.* printf("Komentar: %s\n", yytext); "/*" {BEGIN(comment);printf("Multiline comment start\n");} [^*\n]+ printf("Multiline comment contents: %s\n", yytext); "*"+[^*/\n]* printf("Multiline comment contents: %s\n", yytext); \n "*"+"/" {BEGIN(INITIAL);printf("Multiline comment end\n");} /* whitespace */ [ \t\n\r]+ /*printf("prazno\n");*/ . printf("Greska! Znak nije prepoznat: %s\n", yytext); %%