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