This file is indexed.

/usr/share/doc/bison-doc/html/Strings-are-Destroyed.html is in bison-doc 1:3.0.4-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- 
This manual (22 January 2015) is for GNU Bison (version
3.0.4), the GNU parser generator.

Copyright (C) 1988-1993, 1995, 1998-2015 Free Software
Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License,
Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, with the Front-Cover texts
being "A GNU Manual," and with the Back-Cover Texts as in
(a) below.  A copy of the license is included in the section entitled
"GNU Free Documentation License."

(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
modify this GNU manual.  Buying copies from the FSF
supports it in developing GNU and promoting software
freedom." -->
<!-- Created by GNU Texinfo 6.0, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Bison 3.0.4: Strings are Destroyed</title>

<meta name="description" content="Bison 3.0.4: Strings are Destroyed">
<meta name="keywords" content="Bison 3.0.4: Strings are Destroyed">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Index-of-Terms.html#Index-of-Terms" rel="index" title="Index of Terms">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="FAQ.html#FAQ" rel="up" title="FAQ">
<link href="Implementing-Gotos_002fLoops.html#Implementing-Gotos_002fLoops" rel="next" title="Implementing Gotos/Loops">
<link href="How-Can-I-Reset-the-Parser.html#How-Can-I-Reset-the-Parser" rel="prev" title="How Can I Reset the Parser">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space: nowrap}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: serif; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en">
<a name="Strings-are-Destroyed"></a>
<div class="header">
<p>
Next: <a href="Implementing-Gotos_002fLoops.html#Implementing-Gotos_002fLoops" accesskey="n" rel="next">Implementing Gotos/Loops</a>, Previous: <a href="How-Can-I-Reset-the-Parser.html#How-Can-I-Reset-the-Parser" accesskey="p" rel="prev">How Can I Reset the Parser</a>, Up: <a href="FAQ.html#FAQ" accesskey="u" rel="up">FAQ</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index-of-Terms.html#Index-of-Terms" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Strings-are-Destroyed-1"></a>
<h3 class="section">11.3 Strings are Destroyed</h3>

<blockquote>
<p>My parser seems to destroy old strings, or maybe it loses track of
them.  Instead of reporting &lsquo;<samp>&quot;foo&quot;, &quot;bar&quot;</samp>&rsquo;, it reports
&lsquo;<samp>&quot;bar&quot;, &quot;bar&quot;</samp>&rsquo;, or even &lsquo;<samp>&quot;foo\nbar&quot;, &quot;bar&quot;</samp>&rsquo;.
</p></blockquote>

<p>This error is probably the single most frequent &ldquo;bug report&rdquo; sent to
Bison lists, but is only concerned with a misunderstanding of the role
of the scanner.  Consider the following Lex code:
</p>
<div class="example">
<pre class="example">%{
#include &lt;stdio.h&gt;
char *yylval = NULL;
%}
</pre><pre class="example">%%
.*    yylval = yytext; return 1;
\n    /* IGNORE */
%%
</pre><pre class="example">int
main ()
{
  /* Similar to using $1, $2 in a Bison action.  */
  char *fst = (yylex (), yylval);
  char *snd = (yylex (), yylval);
  printf (&quot;\&quot;%s\&quot;, \&quot;%s\&quot;\n&quot;, fst, snd);
  return 0;
}
</pre></div>

<p>If you compile and run this code, you get:
</p>
<div class="example">
<pre class="example">$ <kbd>flex -osplit-lines.c split-lines.l</kbd>
$ <kbd>gcc  -osplit-lines   split-lines.c -ll</kbd>
$ <kbd>printf 'one\ntwo\n' | ./split-lines</kbd>
&quot;one
two&quot;, &quot;two&quot;
</pre></div>

<p>this is because <code>yytext</code> is a buffer provided for <em>reading</em>
in the action, but if you want to keep it, you have to duplicate it
(e.g., using <code>strdup</code>).  Note that the output may depend on how
your implementation of Lex handles <code>yytext</code>.  For instance, when
given the Lex compatibility option <samp>-l</samp> (which triggers the
option &lsquo;<samp>%array</samp>&rsquo;) Flex generates a different behavior:
</p>
<div class="example">
<pre class="example">$ <kbd>flex -l -osplit-lines.c split-lines.l</kbd>
$ <kbd>gcc     -osplit-lines   split-lines.c -ll</kbd>
$ <kbd>printf 'one\ntwo\n' | ./split-lines</kbd>
&quot;two&quot;, &quot;two&quot;
</pre></div>





</body>
</html>