1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Scan Bison Skeletons. -*- C -*- 2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software 4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Foundation, Inc. 5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project This file is part of Bison, the GNU Compiler Compiler. 7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Bison is free software; you can redistribute it and/or modify it 9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project under the terms of the GNU General Public License as published by 10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project the Free Software Foundation; either version 2, or (at your option) 11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project any later version. 12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Bison is distributed in the hope that it will be useful, but 14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project WITHOUT ANY WARRANTY; without even the implied warranty of 15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project General Public License for more details. 17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project You should have received a copy of the GNU General Public License 19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project along with Bison; see the file COPYING. If not, write to the Free 20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 02110-1301, USA. */ 22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%option nodefault noyywrap nounput never-interactive debug 24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%option prefix="skel_" outfile="lex.yy.c" 25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%{ 27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Work around a bug in flex 2.5.31. See Debian bug 333231 28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */ 29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#undef skel_wrap 30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define skel_wrap() 1 31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "system.h" 33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <error.h> 35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <quotearg.h> 36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "complain.h" 38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "getargs.h" 39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "files.h" 40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "scan-skel.h" 41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used. */ 43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint skel_lex (void); 44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint skel_get_lineno (void); 45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFILE *skel_get_in (void); 46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFILE *skel_get_out (void); 47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint skel_get_leng (void); 48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectchar *skel_get_text (void); 49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid skel_set_lineno (int); 50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid skel_set_in (FILE *); 51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid skel_set_out (FILE *); 52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint skel_get_debug (void); 53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid skel_set_debug (int); 54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint skel_lex_destroy (void); 55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define QPUTS(String) \ 57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fputs (quotearg_style (c_quoting_style, String), yyout) 58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BASE_QPUTS(File) \ 60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project QPUTS (base_name (File)) 61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%} 63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%% 64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%{ 66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project int lineno IF_LINT (= 0); 67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project char *outname = NULL; 68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%} 69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@output ".*\n { 71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project char const *file_name = yytext + sizeof "@output " - 1; 72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project yytext[yyleng - 1] = '\0'; 73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Decode special file names. They include the directory part, 75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project contrary to their "free" occurrences, used for issuing #includes, 76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project which must not include the directory part. */ 77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (*file_name == '@') 79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (strcmp (file_name, "@output_header_name@") == 0) 81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project file_name = spec_defines_file; 82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else if (strcmp (file_name, "@output_parser_name@") == 0) 83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project file_name = parser_file_name; 84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else 85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fatal ("invalid token in skeleton: %s", yytext); 86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (outname) 88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project free (outname); 90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project xfclose (yyout); 91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project outname = xstrdup (file_name); 93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project yyout = xfopen (outname, "w"); 94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project lineno = 1; 95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@@" fputc ('@', yyout); 98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@{" fputc ('[', yyout); 99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@}" fputc (']', yyout); 100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@oline@" fprintf (yyout, "%d", lineno + 1); 102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@ofile@" QPUTS (outname); 103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@dir_prefix@" QPUTS (dir_prefix); 104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@output_parser_name@" BASE_QPUTS (parser_file_name); 105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project"@output_header_name@" BASE_QPUTS (spec_defines_file); 106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* This pattern must not match more than the previous @ patterns. */ 108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@[^{}@\n]* fatal ("invalid @ in skeleton: %s", yytext); 109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project\n lineno++; ECHO; 110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[^@\n]+ ECHO; 111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<<EOF>> { 113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (outname) 114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project free (outname); 116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project xfclose (yyout); 117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return EOF; 119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%% 121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*------------------------. 123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Scan a Bison skeleton. | 124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`------------------------*/ 125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectscan_skel (FILE *in) 128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project skel_in = in; 130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project skel__flex_debug = trace_flag & trace_skeleton; 131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project skel_lex (); 132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Reclaim Flex's buffers. */ 133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project yy_delete_buffer (YY_CURRENT_BUFFER); 134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 135