lex.l (1347B)
1 %option noyywrap 2 %{ 3 #include <stdlib.h> 4 #include "syntax.tab.h" 5 6 int cw = 0; /* correct words */ 7 int ww = 0; /* wrong words */ 8 %} 9 10 /* 11 * Με βάση το μέρος Α2, υλοποιούμε τις κανονικές εκφράσεις και τις 12 * αντιστοιχούμε στα κατάλληλα tokens. 13 */ 14 ARITH "+"|"-"|"*"|"/"|"=" 15 DELIM [ \t\n]+ 16 INT 0|[+-]?[1-9]+[0-9]* 17 FLOAT [+-]?[0-9]+((\.[0-9]+)([eE][+-]?[0-9]*)?|([eE][+-]?[0-9]*)?) 18 STR \"[^\"\\]*(?:\\.[^\"\\]*)*\" 19 DEFIN [A-Za-z]+[A-Za-z0-9_-]* 20 VAR \?[A-Za-z0-9]+ 21 COMMENT ;.* 22 23 /* 24 * Όταν βρίσκει οποιοδήποτε token, επιστρέφει την αντίστοιχη κατηγορία στο 25 * οποίο ανήκει 26 */ 27 %% 28 "deffacts" { cw++; return DEFFACTS; } 29 "defrule" { cw++; return DEFRULE; } 30 "bind" { cw++; return BIND; } 31 "read" { cw++; return READ; } 32 "printout" { cw++; return PRINT; } 33 "test" { cw++; return TEST; } 34 "=" { cw++; return COMP; } 35 "(" { return LPAR; } 36 ")" { return RPAR; } 37 "->" { return ARROW; } 38 {ARITH} { cw++; return ARITH; } 39 {INT} { cw++; return INT; } 40 {FLOAT} { cw++; return FLOAT;} 41 {STR} { cw++; return STR; } 42 {DEFIN} { cw++; return DEFIN; } 43 {VAR} { cw++; return VAR; } 44 {DELIM} { /* ignore whitespace */ } 45 {COMMENT} { /* skip comments */ } 46 "\n" { return NEWLINE; } 47 . { ww++; return UNKNOWN; } 48 %%