This file is indexed.

/usr/share/doc/bison-doc/html/Semantic-Predicates.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
<!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: Semantic Predicates</title>

<meta name="description" content="Bison 3.0.4: Semantic Predicates">
<meta name="keywords" content="Bison 3.0.4: Semantic Predicates">
<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="GLR-Parsers.html#GLR-Parsers" rel="up" title="GLR Parsers">
<link href="Compiler-Requirements.html#Compiler-Requirements" rel="next" title="Compiler Requirements">
<link href="GLR-Semantic-Actions.html#GLR-Semantic-Actions" rel="prev" title="GLR Semantic Actions">
<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="Semantic-Predicates"></a>
<div class="header">
<p>
Next: <a href="Compiler-Requirements.html#Compiler-Requirements" accesskey="n" rel="next">Compiler Requirements</a>, Previous: <a href="GLR-Semantic-Actions.html#GLR-Semantic-Actions" accesskey="p" rel="prev">GLR Semantic Actions</a>, Up: <a href="GLR-Parsers.html#GLR-Parsers" accesskey="u" rel="up">GLR Parsers</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="Controlling-a-Parse-with-Arbitrary-Predicates"></a>
<h4 class="subsection">1.5.4 Controlling a Parse with Arbitrary Predicates</h4>
<a name="index-_0025_003f"></a>
<a name="index-Semantic-predicates-in-GLR-parsers"></a>

<p>In addition to the <code>%dprec</code> and <code>%merge</code> directives,
GLR parsers
allow you to reject parses on the basis of arbitrary computations executed
in user code, without having Bison treat this rejection as an error
if there are alternative parses. (This feature is experimental and may
evolve.  We welcome user feedback.)  For example,
</p>
<div class="example">
<pre class="example">widget:
  %?{  new_syntax } &quot;widget&quot; id new_args  { $$ = f($3, $4); }
| %?{ !new_syntax } &quot;widget&quot; id old_args  { $$ = f($3, $4); }
;
</pre></div>

<p>is one way to allow the same parser to handle two different syntaxes for
widgets.  The clause preceded by <code>%?</code> is treated like an ordinary
action, except that its text is treated as an expression and is always
evaluated immediately (even when in nondeterministic mode).  If the
expression yields 0 (false), the clause is treated as a syntax error,
which, in a nondeterministic parser, causes the stack in which it is reduced
to die.  In a deterministic parser, it acts like YYERROR.
</p>
<p>As the example shows, predicates otherwise look like semantic actions, and
therefore you must be take them into account when determining the numbers
to use for denoting the semantic values of right-hand side symbols.
Predicate actions, however, have no defined value, and may not be given
labels.
</p>
<p>There is a subtle difference between semantic predicates and ordinary
actions in nondeterministic mode, since the latter are deferred.
For example, we could try to rewrite the previous example as
</p>
<div class="example">
<pre class="example">widget:
  { if (!new_syntax) YYERROR; }
    &quot;widget&quot; id new_args  { $$ = f($3, $4); }
|  { if (new_syntax) YYERROR; }
    &quot;widget&quot; id old_args   { $$ = f($3, $4); }
;
</pre></div>

<p>(reversing the sense of the predicate tests to cause an error when they are
false).  However, this
does <em>not</em> have the same effect if <code>new_args</code> and <code>old_args</code>
have overlapping syntax.
Since the mid-rule actions testing <code>new_syntax</code> are deferred,
a GLR parser first encounters the unresolved ambiguous reduction
for cases where <code>new_args</code> and <code>old_args</code> recognize the same string
<em>before</em> performing the tests of <code>new_syntax</code>.  It therefore
reports an error.
</p>
<p>Finally, be careful in writing predicates: deferred actions have not been
evaluated, so that using them in a predicate will have undefined effects.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Compiler-Requirements.html#Compiler-Requirements" accesskey="n" rel="next">Compiler Requirements</a>, Previous: <a href="GLR-Semantic-Actions.html#GLR-Semantic-Actions" accesskey="p" rel="prev">GLR Semantic Actions</a>, Up: <a href="GLR-Parsers.html#GLR-Parsers" accesskey="u" rel="up">GLR Parsers</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>