130e4e410SJoerg Sonnenberger /* $NetBSD: src/usr.bin/mkesdb/lex.l,v 1.2 2003/10/27 00:12:43 lukem Exp $ */ 230e4e410SJoerg Sonnenberger 330e4e410SJoerg Sonnenberger %{ 430e4e410SJoerg Sonnenberger /*- 530e4e410SJoerg Sonnenberger * Copyright (c)2003 Citrus Project, 630e4e410SJoerg Sonnenberger * All rights reserved. 730e4e410SJoerg Sonnenberger * 830e4e410SJoerg Sonnenberger * Redistribution and use in source and binary forms, with or without 930e4e410SJoerg Sonnenberger * modification, are permitted provided that the following conditions 1030e4e410SJoerg Sonnenberger * are met: 1130e4e410SJoerg Sonnenberger * 1. Redistributions of source code must retain the above copyright 1230e4e410SJoerg Sonnenberger * notice, this list of conditions and the following disclaimer. 1330e4e410SJoerg Sonnenberger * 2. Redistributions in binary form must reproduce the above copyright 1430e4e410SJoerg Sonnenberger * notice, this list of conditions and the following disclaimer in the 1530e4e410SJoerg Sonnenberger * documentation and/or other materials provided with the distribution. 1630e4e410SJoerg Sonnenberger * 1730e4e410SJoerg Sonnenberger * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1830e4e410SJoerg Sonnenberger * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1930e4e410SJoerg Sonnenberger * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2030e4e410SJoerg Sonnenberger * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2130e4e410SJoerg Sonnenberger * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2230e4e410SJoerg Sonnenberger * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2330e4e410SJoerg Sonnenberger * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2430e4e410SJoerg Sonnenberger * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2530e4e410SJoerg Sonnenberger * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2630e4e410SJoerg Sonnenberger * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2730e4e410SJoerg Sonnenberger * SUCH DAMAGE. 2830e4e410SJoerg Sonnenberger */ 2930e4e410SJoerg Sonnenberger 3030e4e410SJoerg Sonnenberger #include <sys/endian.h> 3130e4e410SJoerg Sonnenberger #include <sys/queue.h> 3230e4e410SJoerg Sonnenberger #include <assert.h> 3330e4e410SJoerg Sonnenberger #include <errno.h> 3430e4e410SJoerg Sonnenberger #include <limits.h> 3530e4e410SJoerg Sonnenberger #include <stdio.h> 3630e4e410SJoerg Sonnenberger #include <stdlib.h> 3730e4e410SJoerg Sonnenberger #include <string.h> 3830e4e410SJoerg Sonnenberger 3930e4e410SJoerg Sonnenberger #include "ldef.h" 4030e4e410SJoerg Sonnenberger #include "yacc.h" 4130e4e410SJoerg Sonnenberger 42*eb74dec6SJohn Marino int aline_number = 1; 4330e4e410SJoerg Sonnenberger %} 4430e4e410SJoerg Sonnenberger 45*eb74dec6SJohn Marino %option noinput 46*eb74dec6SJohn Marino %option nounput 47*eb74dec6SJohn Marino 4830e4e410SJoerg Sonnenberger %x COMMENT 4930e4e410SJoerg Sonnenberger 5030e4e410SJoerg Sonnenberger %% 5130e4e410SJoerg Sonnenberger 5230e4e410SJoerg Sonnenberger [ \t]+ { } 53*eb74dec6SJohn Marino #.*[\n]|"//".*[\n]|[\n] { aline_number++; return (R_LN); } 5430e4e410SJoerg Sonnenberger 5530e4e410SJoerg Sonnenberger "/*" { BEGIN COMMENT; } 5630e4e410SJoerg Sonnenberger <COMMENT>"*/" { BEGIN 0; } 57*eb74dec6SJohn Marino <COMMENT>[\n] { aline_number++; } 5830e4e410SJoerg Sonnenberger <COMMENT>. { } 5930e4e410SJoerg Sonnenberger <COMMENT><<EOF>> { 6030e4e410SJoerg Sonnenberger yyerror("unexpected file end (unterminate comment)\n"); 6130e4e410SJoerg Sonnenberger exit(1); 6230e4e410SJoerg Sonnenberger } 6330e4e410SJoerg Sonnenberger 6430e4e410SJoerg Sonnenberger ([1-9][0-9]*)|(0[0-9]*)|(0[xX][0-9A-Fa-f]+) { 6530e4e410SJoerg Sonnenberger yylval.i_value = strtoul(yytext, NULL, 0); 6630e4e410SJoerg Sonnenberger return L_IMM; 6730e4e410SJoerg Sonnenberger } 6830e4e410SJoerg Sonnenberger 6930e4e410SJoerg Sonnenberger "NAME" { return R_NAME; } 7030e4e410SJoerg Sonnenberger "ENCODING" { return R_ENCODING; } 7130e4e410SJoerg Sonnenberger "VARIABLE" { return R_VARIABLE; } 7230e4e410SJoerg Sonnenberger "DEFCSID" { return R_DEFCSID; } 7330e4e410SJoerg Sonnenberger "INVALID" { return R_INVALID; } 7430e4e410SJoerg Sonnenberger 7530e4e410SJoerg Sonnenberger \"([^\"\n]*(\\\")?)*\"|\'([^\'\n]*(\\\')?)*\' { 7630e4e410SJoerg Sonnenberger size_t len; 7730e4e410SJoerg Sonnenberger len = strlen(yytext); 7830e4e410SJoerg Sonnenberger yylval.s_value = malloc(len-1); 7930e4e410SJoerg Sonnenberger strlcpy(yylval.s_value, yytext+1, len-1); 8030e4e410SJoerg Sonnenberger return L_STRING; 8130e4e410SJoerg Sonnenberger } 8230e4e410SJoerg Sonnenberger [^ =/\-0-9\t\n][^ \t\n]* { 8330e4e410SJoerg Sonnenberger yylval.s_value = strdup(yytext); 8430e4e410SJoerg Sonnenberger return L_STRING; 8530e4e410SJoerg Sonnenberger } 8630e4e410SJoerg Sonnenberger 8730e4e410SJoerg Sonnenberger %% 8830e4e410SJoerg Sonnenberger 8930e4e410SJoerg Sonnenberger #ifndef yywrap 9030e4e410SJoerg Sonnenberger int 9130e4e410SJoerg Sonnenberger yywrap(void) 9230e4e410SJoerg Sonnenberger { 9330e4e410SJoerg Sonnenberger return (1); 9430e4e410SJoerg Sonnenberger } 9530e4e410SJoerg Sonnenberger #endif 96