summaryrefslogtreecommitdiff
path: root/2003/i/buzz/src/automate/lexer.ll
blob: 21e50be03178bdfcc37b258937c2daa7e91914c0 (plain)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
%{
#include <iostream>
using namespace std;

#include "grafcet.h"
using namespace Automate;

#include "grammar.h"

int yyparse (void);

extern Grafcet *input_grafcet;

%}

ID	[_a-zA-Z][-_a-zA-Z0-9]*

NUM	[-+]?[0-9]+

FLOAT	[-+]?[0-9]*"."[0-9]*

STRING	\"[^\n"]\"

%option noyywrap nounput

%%

/*Rajout des actions et des conditions ici*/

"goto"	return GOTO;

"print"	return PRINT;

"&&"	return '&';
"||"	return '|';
"=="	return EQ;
"!="	return NEQ;
"<="	return LEQ;
">="	return GEQ;

[-#+=*/<>()]	return yytext[0];

{FLOAT}	{
    yylval.fl = strtod (yytext, 0);
    return FLOAT;
}

{NUM}	{
    yylval.num = strtol (yytext, 0, 0);
    return NUM;
}

{STRING}        {
	yylval.s = new string (yytext + 1, yyleng - 2);
	return STRING;
}

"true"	{ yylval.boolean = true; return BOOL; }
"false"	{ yylval.boolean = false; return BOOL; }

[ \t\n]+	/* Rien � battre. */

.	return ERR;

%%

Grafcet *parse_string (const char *s)
{
	yy_scan_string (s);
	return yyparse () ? 0 : input_grafcet;
}

Grafcet *parse_file (const char *filename)
{
	yyin = fopen (filename, "r");
	if (!yyin) return 0;
	int r = yyparse ();
	fclose (yyin);
	return r ? 0 : input_grafcet;
}

// vim: ft=lex