1 /********************************************************************************************************* 2 * Software License Agreement (BSD License) * 3 * Author: Sebastien Decugis <sdecugis@freediameter.net> * 4 * * 5 * Copyright (c) 2013, WIDE Project and NICT * 6 * All rights reserved. * 7 * * 8 * Redistribution and use of this software in source and binary forms, with or without modification, are * 9 * permitted provided that the following conditions are met: * 10 * * 11 * * Redistributions of source code must retain the above * 12 * copyright notice, this list of conditions and the * 13 * following disclaimer. * 14 * * 15 * * Redistributions in binary form must reproduce the above * 16 * copyright notice, this list of conditions and the * 17 * following disclaimer in the documentation and/or other * 18 * materials provided with the distribution. * 19 * * 20 * * Neither the name of the WIDE Project or NICT nor the * 21 * names of its contributors may be used to endorse or * 22 * promote products derived from this software without * 23 * specific prior written permission of WIDE Project and * 24 * NICT. * 25 * * 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * 27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * 28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * 29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * 30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * 31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * 32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * 33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * 34 *********************************************************************************************************/ 35 36 /* Tokenizer 37 * 38 */ 39 40 %{ 41 #include "dict_lxml.h" 42 /* Include yacc tokens definitions */ 43 #include "dict_lxml.tab.h" 44 45 /* Update the column information */ 46 #define YY_USER_ACTION { \ 47 yylloc->first_column = yylloc->last_column + 1; \ 48 yylloc->last_column = yylloc->first_column + yyleng - 1; \ 49 } 50 51 /* Avoid warning with newer flex */ 52 #define YY_NO_INPUT 53 54 %} 55 56 qstring \"[^\"\n]*\" 57 58 59 %option bison-bridge bison-locations 60 %option noyywrap 61 %option nounput 62 63 %% 64 65 /* Update the line count */ 66 \n { 67 yylloc->first_line++; 68 yylloc->last_line++; 69 yylloc->last_column=0; 70 } 71 72 /* Eat all spaces but not new lines */ 73 ([[:space:]]{-}[\n])+ ; 74 /* Eat all comments */ 75 #.*$ ; 76 77 /* Recognize quoted strings */ 78 {qstring} { 79 /* Match a quoted string. */ 80 CHECK_MALLOC_DO( yylval->string = strdup(yytext+1), 81 { 82 TRACE_DEBUG(INFO, "Unable to copy the string '%s': %s", yytext, strerror(errno)); 83 return LEX_ERROR; /* trig an error in yacc parser */ 84 } ); 85 yylval->string[strlen(yytext) - 2] = '\0'; 86 return QSTRING; 87 } 88 89 /* Valid single characters for yyparse */ 90 [;] { return yytext[0]; } 91 92 /* Unrecognized sequence, if it did not match any previous pattern */ 93 [^[:space:]\";\n]+ { 94 fd_log_debug("Unrecognized text on line %d col %d: '%s'.", yylloc->first_line, yylloc->first_column, yytext); 95 return LEX_ERROR; 96 } 97 98 %% 99