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