From da4a77ff094a0dc74414ec1de2cac08e8b7b60f4 Mon Sep 17 00:00:00 2001 From: haller Date: Thu, 17 Nov 2005 11:10:17 +0000 Subject: Importation brut du code récupérable de robert --- i/marvin/src/config/lexer.ll | 112 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 i/marvin/src/config/lexer.ll (limited to 'i/marvin/src/config/lexer.ll') diff --git a/i/marvin/src/config/lexer.ll b/i/marvin/src/config/lexer.ll new file mode 100644 index 0000000..96a90b3 --- /dev/null +++ b/i/marvin/src/config/lexer.ll @@ -0,0 +1,112 @@ +%{ +// robert - programme du robot 2005. {{{ +// +// Copyright (C) 2005 Nicolas Schodet +// +// Robot APB Team/Efrei 2005. +// 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 "config/config.hh" +#include "config/parser_extra.hh" +#include "utils/any.hh" +#include "parser.hh" +%} + +%option reentrant +%option header-file="lexer.hh" +%option outfile="lexer.cc" +%option bison-bridge +%option noyywrap nodefault nounput + +%x strst + +INTDEC [+-]?[0-9]+ +INTHEX "0x"[0-9a-fA-F]+ +INTNUM {INTDEC}|{INTHEX} +FLOAT1 [+-]?\.[0-9]+ +FLOAT2 [+-]?[0-9]+\.[0-9]* +FLOATNUM {FLOAT1}|{FLOAT2} + +%% + +"true"|"on" { + yylval->b = true; + return BOOLEAN; +} + +"false"|"off" { + yylval->b = false; + return BOOLEAN; +} + +[a-zA-Z][_a-zA-Z0-9.-]* { + yylval->s = new std::string (yytext); + return ID; +} + +{FLOATNUM} { + yylval->f = strtod (yytext, 0); + return FLOAT; +} + +{INTNUM} { + yylval->i = strtol (yytext, 0, 0); + return INT; +} + +\" { + BEGIN(strst); + yyextra->tmp.clear (); +} + +[=\n()] return yytext[0]; + +"img:" return IMG; +"data:" return DATA; + +[ \t]+ /* Skip. */ +#.* /* Skip comments. */ + +. { + yylval->c = yytext[0]; + std::cout << "UNKNOWN " << yytext[0] << std::endl; + 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'; +\\(.|\n) yyextra->tmp += yytext[1]; +. yyextra->tmp += yytext[0]; +\n { + yylval->c = yytext[0]; + return UNKNOWN; +} + + +%% + +/* vim:ft=lex: +*/ -- cgit v1.2.3