lex.l revision 1.4
11.4Schristos/* $NetBSD: lex.l,v 1.4 2009/10/28 22:22:44 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.4Schristos__RCSID("$NetBSD: lex.l,v 1.4 2009/10/28 22:22:44 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.4Schristos#define YY_NO_UNPUT 541.4Schristos#define YY_NO_INPUT 551.1Stshiozak%} 561.1Stshiozak 571.1Stshiozak%x COMMENT 581.1Stshiozak 591.1Stshiozak%% 601.1Stshiozak 611.1Stshiozak[ \t]+ { } 621.1Stshiozak#.*[\n]|"//".*[\n]|[\n] { line_number++; return (R_LN); } 631.1Stshiozak 641.1Stshiozak"/*" { BEGIN COMMENT; } 651.1Stshiozak<COMMENT>"*/" { BEGIN 0; } 661.1Stshiozak<COMMENT>[\n] { line_number++; } 671.1Stshiozak<COMMENT>. { } 681.1Stshiozak<COMMENT><<EOF>> { 691.1Stshiozak yyerror("unexpected file end (unterminate comment)\n"); 701.1Stshiozak exit(1); 711.1Stshiozak } 721.1Stshiozak 731.1Stshiozak([1-9][0-9]*)|(0[0-9]*)|(0[xX][0-9A-Fa-f]+) { 741.1Stshiozak yylval.i_value = strtoul(yytext, NULL, 0); 751.1Stshiozak return L_IMM; 761.1Stshiozak } 771.1Stshiozak 781.1Stshiozak"NAME" { return R_NAME; } 791.1Stshiozak"ENCODING" { return R_ENCODING; } 801.1Stshiozak"VARIABLE" { return R_VARIABLE; } 811.1Stshiozak"DEFCSID" { return R_DEFCSID; } 821.1Stshiozak"INVALID" { return R_INVALID; } 831.1Stshiozak 841.1Stshiozak\"([^\"\n]*(\\\")?)*\"|\'([^\'\n]*(\\\')?)*\' { 851.1Stshiozak size_t len; 861.1Stshiozak len = strlen(yytext); 871.1Stshiozak yylval.s_value = malloc(len-1); 881.1Stshiozak strlcpy(yylval.s_value, yytext+1, len-1); 891.1Stshiozak return L_STRING; 901.1Stshiozak } 911.1Stshiozak[^ =/\-0-9\t\n][^ \t\n]* { 921.1Stshiozak yylval.s_value = strdup(yytext); 931.1Stshiozak return L_STRING; 941.1Stshiozak } 951.1Stshiozak 961.1Stshiozak%% 971.1Stshiozak 981.1Stshiozak#ifndef yywrap 991.1Stshiozakint 1001.1Stshiozakyywrap(void) 1011.1Stshiozak{ 1021.1Stshiozak return (1); 1031.1Stshiozak} 1041.1Stshiozak#endif 105