lex.l revision 1.5
11.5Schristos/*	$NetBSD: lex.l,v 1.5 2009/10/29 14:49:03 christos Exp $	*/
21.1Stshiozak
31.1Stshiozak%{
41.1Stshiozak/*-
51.1Stshiozak * Copyright (c)2003 Citrus Project,
61.1Stshiozak * All rights reserved.
71.1Stshiozak *
81.1Stshiozak * Redistribution and use in source and binary forms, with or without
91.1Stshiozak * modification, are permitted provided that the following conditions
101.1Stshiozak * are met:
111.1Stshiozak * 1. Redistributions of source code must retain the above copyright
121.1Stshiozak *    notice, this list of conditions and the following disclaimer.
131.1Stshiozak * 2. Redistributions in binary form must reproduce the above copyright
141.1Stshiozak *    notice, this list of conditions and the following disclaimer in the
151.1Stshiozak *    documentation and/or other materials provided with the distribution.
161.1Stshiozak *
171.1Stshiozak * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
181.1Stshiozak * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
191.1Stshiozak * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
201.1Stshiozak * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
211.1Stshiozak * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
221.1Stshiozak * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
231.1Stshiozak * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
241.1Stshiozak * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
251.1Stshiozak * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
261.1Stshiozak * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
271.1Stshiozak * SUCH DAMAGE.
281.1Stshiozak */
291.1Stshiozak
301.2Slukem#if HAVE_NBTOOL_CONFIG_H
311.2Slukem#include "nbtool_config.h"
321.1Stshiozak#endif
331.1Stshiozak
341.1Stshiozak#include <sys/cdefs.h>
351.2Slukem#if !defined(lint)
361.5Schristos__RCSID("$NetBSD: lex.l,v 1.5 2009/10/29 14:49:03 christos Exp $");
371.2Slukem#endif /* not lint */
381.1Stshiozak
391.1Stshiozak#include <assert.h>
401.1Stshiozak#include <errno.h>
411.1Stshiozak#include <limits.h>
421.1Stshiozak#include <stdio.h>
431.1Stshiozak#include <stdlib.h>
441.1Stshiozak#include <string.h>
451.3Sdogcow#include <machine/endian.h>
461.1Stshiozak#include <sys/queue.h>
471.1Stshiozak
481.1Stshiozak#include "ldef.h"
491.1Stshiozak#include "yacc.h"
501.1Stshiozak
511.1Stshiozakint line_number = 1;
521.4Schristos
531.1Stshiozak%}
541.1Stshiozak
551.5Schristos%option noinput nounput
561.1Stshiozak%x	COMMENT
571.1Stshiozak
581.1Stshiozak%%
591.1Stshiozak
601.1Stshiozak[ \t]+	{ }
611.1Stshiozak#.*[\n]|"//".*[\n]|[\n]	{ line_number++; return (R_LN); }
621.1Stshiozak
631.1Stshiozak"/*"		{ BEGIN COMMENT; }
641.1Stshiozak<COMMENT>"*/"	{ BEGIN 0; }
651.1Stshiozak<COMMENT>[\n]	{ line_number++; }
661.1Stshiozak<COMMENT>.	{ }
671.1Stshiozak<COMMENT><<EOF>>	{
681.1Stshiozak		yyerror("unexpected file end (unterminate comment)\n");
691.1Stshiozak		exit(1);
701.1Stshiozak	}
711.1Stshiozak
721.1Stshiozak([1-9][0-9]*)|(0[0-9]*)|(0[xX][0-9A-Fa-f]+)	{
731.1Stshiozak		yylval.i_value = strtoul(yytext, NULL, 0);
741.1Stshiozak		return L_IMM;
751.1Stshiozak	}
761.1Stshiozak
771.1Stshiozak"NAME"		{ return R_NAME; }
781.1Stshiozak"ENCODING"	{ return R_ENCODING; }
791.1Stshiozak"VARIABLE"	{ return R_VARIABLE; }
801.1Stshiozak"DEFCSID"	{ return R_DEFCSID; }
811.1Stshiozak"INVALID"	{ return R_INVALID; }
821.1Stshiozak
831.1Stshiozak\"([^\"\n]*(\\\")?)*\"|\'([^\'\n]*(\\\')?)*\'	{
841.1Stshiozak		size_t len;
851.1Stshiozak		len = strlen(yytext);
861.1Stshiozak		yylval.s_value = malloc(len-1);
871.1Stshiozak		strlcpy(yylval.s_value, yytext+1, len-1);
881.1Stshiozak		return L_STRING;
891.1Stshiozak	}
901.1Stshiozak[^ =/\-0-9\t\n][^ \t\n]*	{
911.1Stshiozak		yylval.s_value = strdup(yytext);
921.1Stshiozak		return L_STRING;
931.1Stshiozak	}
941.1Stshiozak
951.1Stshiozak%%
961.1Stshiozak
971.1Stshiozak#ifndef yywrap
981.1Stshiozakint
991.1Stshiozakyywrap(void)
1001.1Stshiozak{
1011.1Stshiozak	return (1);
1021.1Stshiozak}
1031.1Stshiozak#endif
104