1*357f1050SThomas Veerman /* 2*357f1050SThomas Veerman * This file is part of flex. 3*357f1050SThomas Veerman * 4*357f1050SThomas Veerman * Redistribution and use in source and binary forms, with or without 5*357f1050SThomas Veerman * modification, are permitted provided that the following conditions 6*357f1050SThomas Veerman * are met: 7*357f1050SThomas Veerman * 8*357f1050SThomas Veerman * 1. Redistributions of source code must retain the above copyright 9*357f1050SThomas Veerman * notice, this list of conditions and the following disclaimer. 10*357f1050SThomas Veerman * 2. Redistributions in binary form must reproduce the above copyright 11*357f1050SThomas Veerman * notice, this list of conditions and the following disclaimer in the 12*357f1050SThomas Veerman * documentation and/or other materials provided with the distribution. 13*357f1050SThomas Veerman * 14*357f1050SThomas Veerman * Neither the name of the University nor the names of its contributors 15*357f1050SThomas Veerman * may be used to endorse or promote products derived from this software 16*357f1050SThomas Veerman * without specific prior written permission. 17*357f1050SThomas Veerman * 18*357f1050SThomas Veerman * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 19*357f1050SThomas Veerman * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 20*357f1050SThomas Veerman * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21*357f1050SThomas Veerman * PURPOSE. 22*357f1050SThomas Veerman */ 23*357f1050SThomas Veerman 24*357f1050SThomas Veerman %{ 25*357f1050SThomas Veerman /* The scanner expects to link to bison yylval . */ 26*357f1050SThomas Veerman #include <stdio.h> 27*357f1050SThomas Veerman #include <stdlib.h> 28*357f1050SThomas Veerman #include "parser.h" 29*357f1050SThomas Veerman #include "config.h" 30*357f1050SThomas Veerman static char* STRDUP(char* s1); 31*357f1050SThomas Veerman #define YY_EXTRA_TYPE int 32*357f1050SThomas Veerman %} 33*357f1050SThomas Veerman 34*357f1050SThomas Veerman %option 8bit outfile="scanner.c" prefix="test" 35*357f1050SThomas Veerman %option reentrant bison-bridge bison-locations yylineno 36*357f1050SThomas Veerman %option nomain nounput noyy_top_state noyywrap nodefault warn 37*357f1050SThomas Veerman %option prefix="test" header="scanner.h" 38*357f1050SThomas Veerman 39*357f1050SThomas Veerman 40*357f1050SThomas Veerman %% 41*357f1050SThomas Veerman 42*357f1050SThomas Veerman if ( !yyextra) 43*357f1050SThomas Veerman yyextra = 1; 44*357f1050SThomas Veerman 45*357f1050SThomas Veerman ^[[:digit:]]+ { 46*357f1050SThomas Veerman yylval->lineno = yyextra++; 47*357f1050SThomas Veerman yylloc->first_line = (int)strtol(yytext,NULL,10); 48*357f1050SThomas Veerman return LINENO; 49*357f1050SThomas Veerman } 50*357f1050SThomas Veerman ":" { return COLON; } 51*357f1050SThomas Veerman " " { return SPACE; } 52*357f1050SThomas Veerman "=" { return EQUAL; } 53*357f1050SThomas Veerman [[:alnum:]_]+ { yylval->str = STRDUP(yytext); return IDENT;} 54*357f1050SThomas Veerman 55*357f1050SThomas Veerman \r|\n { } 56*357f1050SThomas Veerman . { yyterminate();} 57*357f1050SThomas Veerman %% 58*357f1050SThomas Veerman 59*357f1050SThomas Veerman 60*357f1050SThomas Veerman static char* STRDUP(char* s1) 61*357f1050SThomas Veerman { 62*357f1050SThomas Veerman char* s2 = (char*)malloc(strlen(s1)+1); 63*357f1050SThomas Veerman sprintf(s2,"%s",s1); 64*357f1050SThomas Veerman return s2; 65*357f1050SThomas Veerman } 66