summaryrefslogtreecommitdiff
path: root/2003/i/buzz/src/automate/lexer.ll
blob: 3847970b7f4cac4f2240ad60379ffc6df4616e06 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
%{
#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

%%

"init" return INIT;			//si robot initialise
"palets_trouves" return PALETS_TROUVES;	//si palets trouve durant la recherche
"palets" return PALETS;			//param:num ex:palets 1 valeurs possibles:1,2,3 nombre de palets dans la pile
"stocke" return STOCKE;			//param:num ex:stocke 0 valeurs possibles:0,1,2 nombre de palets stockes
"couleur_adverse" return COULEUR_ADVERSE; //param:num vp:1:capteur avant ,2:capteur arriere ,3:camera
"pince_angle" return PINCE_ANGLE;	//param:num ex:pince_angle 0 valeurs possibles:0 ou 180 angle des 2 pinces
"pince_pos" return PINCE_POS;		//param:num ex:pince_pos 2 vp:1,4:1+,2,5:2+,3,6:3+ position horizontale des 2 pinces
"robot_recule" return ROBOT_RECULE;	//determine si le robot a fini de reculer
"robot_avance" return ROBOT_AVANCE;	//determine si le robot a fini d'avancer

"goto"	return GOTO;

"print"	return PRINT;
"initialisation" return INITIALISATION;
"rechercher" return RECHERCHER;		//Determine la position d'un palet ou d'une pile cible non-marque
"rotation" return ROTATION;		//Fait la rotation du robot suivant la carte pour une meilleure recherche
"atteindre" return AVANCER_PALET; 	//contient le chemineur pour arriver devant le palet cible
"nb_palet_pile" return NB_PALET_PILE; 	//Determine le nb de palet dans la pile cible
"nb_palet_stocke" return NB_PALET_STOCKE; //Determine le nb de palet stocke
"mise_en_place" return MISE_EN_PLACE;	//Mise en place du palet ou de la pile cible ceux ci etant atteint
"reperer_couleur" return REPERER_COULEUR; //param:num vp:1:avant, 2:arriere
"retourner" return RETOURNER;		//Retourne le palet de l'avant vers l'arriere ou inversemment
"avancer" return AVANCER;		//param:num  vp:1,2,..n avance le robot de une a n fois une longueur (fixe) en avant
"reculer" return RECULER;		//param:num  vp:1,2,..n recule le robot de une a n fois une longueur (fixe) en arriere
"placer_pince" return PLACER_PINCE;	//param:num vp:1..6 postionne les 2 pinces aux positions 1 � 6 vues plus haut

"&&"	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