From 8f486613be58ced269db1d437e560c16558604e8 Mon Sep 17 00:00:00 2001 From: becquet Date: Thu, 10 May 2007 18:49:20 +0000 Subject: Création de chuck, le programme du robot 2007. --- i/chuck/src/parser/yylexer.ll | 148 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 i/chuck/src/parser/yylexer.ll (limited to 'i/chuck/src/parser/yylexer.ll') diff --git a/i/chuck/src/parser/yylexer.ll b/i/chuck/src/parser/yylexer.ll new file mode 100644 index 0000000..be8d41c --- /dev/null +++ b/i/chuck/src/parser/yylexer.ll @@ -0,0 +1,148 @@ +%{ +// marvin - programme du robot 2006. {{{ +// +// Copyright (C) 2006 Nicolas Schodet +// +// Robot APB Team/Efrei 2006. +// Web: http://assos.efrei.fr/robot/ +// Email: robot AT efrei DOT fr +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} +#include "parser/parser.hh" +#include "yyparser.hh" +%} + +%option reentrant +%option header-file="yylexer.hh" +%option outfile="yylexer.cc" +%option bison-bridge +%option noyywrap nodefault nounput + +%x strst + +INTDEC [+-]?[0-9]+ +INTHEX "0x"[0-9a-fA-F]+ +INTNUM {INTDEC}|{INTHEX} +DOUBLEEX [eE]{INTDEC} +DOUBLE1 [+-]?\.[0-9]+{DOUBLEEX}? +DOUBLE2 [+-]?[0-9]+\.[0-9]*{DOUBLEEX}? +DOUBLE3 {INTDEC}{DOUBLEEX} +DOUBLENUM {DOUBLE1}|{DOUBLE2}|{DOUBLE3} + +%% + +"true"|"on"|"yes" { + yylval->b = true; + return BOOLEAN; +} + +"false"|"off"|"no" { + yylval->b = false; + return BOOLEAN; +} + +"'"\\n"'" { + yylval->c = '\n'; + return CHAR; +} +"'"\\r"'" { + yylval->c = '\r'; + return CHAR; +} +"'"\\t"'" { + yylval->c = '\t'; + return CHAR; +} +"'"\\."'" { + yylval->c = yytext[1]; + return CHAR; +} +"'"\\\n"'" { + yyextra->line++; + yylval->c = yytext[1]; + return CHAR; +} +"'"."'" { + yylval->c = yytext[1]; + return CHAR; +} + +[a-zA-Z][_a-zA-Z0-9.-]* { + yylval->s = new std::string (yytext); + return ID; +} + +{DOUBLENUM} { + yylval->d = strtod (yytext, 0); + return DOUBLE; +} + +{INTNUM} { + yylval->i = strtol (yytext, 0, 0); + return INT; +} + +\" { + BEGIN(strst); + yyextra->tmp.clear (); +} + +\n { + yyextra->line++; + return SEP; +} + +; { + return SEP; +} + +[=()] return yytext[0]; + +[ \t]+ /* Skip. */ +#.* /* Skip comments. */ + +. { + yyextra->error (std::string ("unexpected character \'") \ + + yytext[0] + '\''); + return UNKNOWN; +} + +\" { + BEGIN (INITIAL); + yylval->s = new std::string (yyextra->tmp); + return STRING; +} + +\\n yyextra->tmp += '\n'; +\\r yyextra->tmp += '\r'; +\\t yyextra->tmp += '\t'; +\\. yyextra->tmp += yytext[1]; +\\\n { + yyextra->line++; + yyextra->tmp += yytext[1]; +} +. yyextra->tmp += yytext[0]; +\n { + yyextra->error ("unexpected end of line inside string"); + yyextra->line++; + return UNKNOWN; +} + +%% + +/* vim:ft=lex: +*/ -- cgit v1.2.3