/usr/share/doc/bison-doc/html/Grammar-in-Bison.html is in bison-doc 1:2.5-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 | <html lang="en">
<head>
<title>Grammar in Bison - Bison 2.5</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Bison 2.5">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Concepts.html#Concepts" title="Concepts">
<link rel="prev" href="Language-and-Grammar.html#Language-and-Grammar" title="Language and Grammar">
<link rel="next" href="Semantic-Values.html#Semantic-Values" title="Semantic Values">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This manual (14 May 2011) is for GNU Bison (version
2.5), the GNU parser generator.
Copyright (C) 1988-1993, 1995, 1998-2011 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.''
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<a name="Grammar-in-Bison"></a>
<p>
Next: <a rel="next" accesskey="n" href="Semantic-Values.html#Semantic-Values">Semantic Values</a>,
Previous: <a rel="previous" accesskey="p" href="Language-and-Grammar.html#Language-and-Grammar">Language and Grammar</a>,
Up: <a rel="up" accesskey="u" href="Concepts.html#Concepts">Concepts</a>
<hr>
</div>
<h3 class="section">1.2 From Formal Rules to Bison Input</h3>
<p><a name="index-Bison-grammar-18"></a><a name="index-grammar_002c-Bison-19"></a><a name="index-formal-grammar-20"></a>
A formal grammar is a mathematical construct. To define the language
for Bison, you must write a file expressing the grammar in Bison syntax:
a <dfn>Bison grammar</dfn> file. See <a href="Grammar-File.html#Grammar-File">Bison Grammar Files</a>.
<p>A nonterminal symbol in the formal grammar is represented in Bison input
as an identifier, like an identifier in C. By convention, it should be
in lower case, such as <code>expr</code>, <code>stmt</code> or <code>declaration</code>.
<p>The Bison representation for a terminal symbol is also called a <dfn>token
type</dfn>. Token types as well can be represented as C-like identifiers. By
convention, these identifiers should be upper case to distinguish them from
nonterminals: for example, <code>INTEGER</code>, <code>IDENTIFIER</code>, <code>IF</code> or
<code>RETURN</code>. A terminal symbol that stands for a particular keyword in
the language should be named after that keyword converted to upper case.
The terminal symbol <code>error</code> is reserved for error recovery.
See <a href="Symbols.html#Symbols">Symbols</a>.
<p>A terminal symbol can also be represented as a character literal, just like
a C character constant. You should do this whenever a token is just a
single character (parenthesis, plus-sign, etc.): use that same character in
a literal as the terminal symbol for that token.
<p>A third way to represent a terminal symbol is with a C string constant
containing several characters. See <a href="Symbols.html#Symbols">Symbols</a>, for more information.
<p>The grammar rules also have an expression in Bison syntax. For example,
here is the Bison rule for a C <code>return</code> statement. The semicolon in
quotes is a literal character token, representing part of the C syntax for
the statement; the naked semicolon, and the colon, are Bison punctuation
used in every rule.
<pre class="example"> stmt: RETURN expr ';'
;
</pre>
<p class="noindent">See <a href="Rules.html#Rules">Syntax of Grammar Rules</a>.
</body></html>
|