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