-
Notifications
You must be signed in to change notification settings - Fork 1
/
trex_parser.l
52 lines (42 loc) · 1.66 KB
/
trex_parser.l
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* Include a licence here */
/* Definitions */
%{
#include <stdio.h> // not sure if stdio is needed here
#include <stdlib.h> // standard library to process strings and numbers
#include <math.h> // math functions
#include "trex_parser.h"
#include "y.tab.h" // This is generated automatically
void yyerror(char *);
%}
/* Regular expressions */
integers [-+]?[0-9]*
floats [-+]?[0-9]*[.][0-9]+
strings [a-zA-Z]+
/* Rules */
%%
/* strings */
{strings} {sscanf(yytext, "%s", yylval.name); return (STRING);} /* one or more copies of characters */
/* Integers */
{integers} { yylval.number = atoi(yytext); return INTEGER; } /* integer of any lenght */
/* Floats */
{floats} { yylval.number = atof(yytext); return FLOAT; } /* float of any lenght */
/* skip whitespaces and tabs */
[ \t\n]+ ; /* tabs and whitespaces are ignored */
/* explicit text matching */
"print" {return (PRT);}
"write" {return (PRT);}
"while" {return (WHILE);}
"if" {return (IF);}
"else" {return (ELSE);}
"endif" {return (ENDIF);}
/* operators */
[-+/%*=;()\n] { return *yytext; }
/* operators */
[NEGATION] {return *yytext; }
/* Everything else is an error */
. yyerror("Character not in the alphabet"); /* Note there is a dot at the beginning */
%%
/* Subroutines */
int yywrap(void) {
return 1;
}