uni

University stuff
git clone git://git.margiolis.net/uni.git
Log | Files | Refs | README | LICENSE

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 %%