This file is indexed.

/usr/share/doc/bison-doc/html/Actions.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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!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: Actions</title>

<meta name="description" content="Bison 3.0.4: Actions">
<meta name="keywords" content="Bison 3.0.4: Actions">
<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="Semantics.html#Semantics" rel="up" title="Semantics">
<link href="Action-Types.html#Action-Types" rel="next" title="Action Types">
<link href="Structured-Value-Type.html#Structured-Value-Type" rel="prev" title="Structured Value Type">
<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="Actions"></a>
<div class="header">
<p>
Next: <a href="Action-Types.html#Action-Types" accesskey="n" rel="next">Action Types</a>, Previous: <a href="Structured-Value-Type.html#Structured-Value-Type" accesskey="p" rel="prev">Structured Value Type</a>, Up: <a href="Semantics.html#Semantics" accesskey="u" rel="up">Semantics</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="Actions-1"></a>
<h4 class="subsection">3.4.6 Actions</h4>
<a name="index-action"></a>
<a name="index-_0024_0024-2"></a>
<a name="index-_0024n-2"></a>
<a name="index-_0024name-1"></a>
<a name="index-_0024_005bname_005d-1"></a>

<p>An action accompanies a syntactic rule and contains C code to be executed
each time an instance of that rule is recognized.  The task of most actions
is to compute a semantic value for the grouping built by the rule from the
semantic values associated with tokens or smaller groupings.
</p>
<p>An action consists of braced code containing C statements, and can be
placed at any position in the rule;
it is executed at that position.  Most rules have just one action at the
end of the rule, following all the components.  Actions in the middle of
a rule are tricky and used only for special purposes (see <a href="Mid_002dRule-Actions.html#Mid_002dRule-Actions">Actions in Mid-Rule</a>).
</p>
<p>The C code in an action can refer to the semantic values of the
components matched by the rule with the construct <code>$<var>n</var></code>,
which stands for the value of the <var>n</var>th component.  The semantic
value for the grouping being constructed is <code>$$</code>.  In addition,
the semantic values of symbols can be accessed with the named
references construct <code>$<var>name</var></code> or <code>$[<var>name</var>]</code>.
Bison translates both of these constructs into expressions of the
appropriate type when it copies the actions into the parser
implementation file.  <code>$$</code> (or <code>$<var>name</var></code>, when it stands
for the current grouping) is translated to a modifiable lvalue, so it
can be assigned to.
</p>
<p>Here is a typical example:
</p>
<div class="example">
<pre class="example">exp:
&hellip;
| exp '+' exp     { $$ = $1 + $3; }
</pre></div>

<p>Or, in terms of named references:
</p>
<div class="example">
<pre class="example">exp[result]:
&hellip;
| exp[left] '+' exp[right]  { $result = $left + $right; }
</pre></div>

<p>This rule constructs an <code>exp</code> from two smaller <code>exp</code> groupings
connected by a plus-sign token.  In the action, <code>$1</code> and <code>$3</code>
(<code>$left</code> and <code>$right</code>)
refer to the semantic values of the two component <code>exp</code> groupings,
which are the first and third symbols on the right hand side of the rule.
The sum is stored into <code>$$</code> (<code>$result</code>) so that it becomes the
semantic value of
the addition-expression just recognized by the rule.  If there were a
useful semantic value associated with the &lsquo;<samp>+</samp>&rsquo; token, it could be
referred to as <code>$2</code>.
</p>
<p>See <a href="Named-References.html#Named-References">Named References</a>, for more information about using the named
references construct.
</p>
<p>Note that the vertical-bar character &lsquo;<samp>|</samp>&rsquo; is really a rule
separator, and actions are attached to a single rule.  This is a
difference with tools like Flex, for which &lsquo;<samp>|</samp>&rsquo; stands for either
&ldquo;or&rdquo;, or &ldquo;the same action as that of the next rule&rdquo;.  In the
following example, the action is triggered only when &lsquo;<samp>b</samp>&rsquo; is found:
</p>
<div class="example">
<pre class="example">a-or-b: 'a'|'b'   { a_or_b_found = 1; };
</pre></div>

<a name="index-default-action"></a>
<p>If you don&rsquo;t specify an action for a rule, Bison supplies a default:
<code>$$&nbsp;=&nbsp;$1</code>.<!-- /@w -->  Thus, the value of the first symbol in the rule
becomes the value of the whole rule.  Of course, the default action is
valid only if the two data types match.  There is no meaningful default
action for an empty rule; every empty rule must have an explicit action
unless the rule&rsquo;s value does not matter.
</p>
<p><code>$<var>n</var></code> with <var>n</var> zero or negative is allowed for reference
to tokens and groupings on the stack <em>before</em> those that match the
current rule.  This is a very risky practice, and to use it reliably
you must be certain of the context in which the rule is applied.  Here
is a case in which you can use this reliably:
</p>
<div class="example">
<pre class="example">foo:
  expr bar '+' expr  { &hellip; }
| expr bar '-' expr  { &hellip; }
;
</pre><pre class="example">
</pre><pre class="example">bar:
  %empty    { previous_expr = $0; }
;
</pre></div>

<p>As long as <code>bar</code> is used only in the fashion shown here, <code>$0</code>
always refers to the <code>expr</code> which precedes <code>bar</code> in the
definition of <code>foo</code>.
</p>
<a name="index-yylval-3"></a>
<p>It is also possible to access the semantic value of the lookahead token, if
any, from a semantic action.
This semantic value is stored in <code>yylval</code>.
See <a href="Action-Features.html#Action-Features">Special Features for Use in Actions</a>.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Action-Types.html#Action-Types" accesskey="n" rel="next">Action Types</a>, Previous: <a href="Structured-Value-Type.html#Structured-Value-Type" accesskey="p" rel="prev">Structured Value Type</a>, Up: <a href="Semantics.html#Semantics" accesskey="u" rel="up">Semantics</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>



</body>
</html>