bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: master: doc: fix mfcalc code


From: Akim Demaille
Subject: FYI: master: doc: fix mfcalc code
Date: Thu, 16 Feb 2012 15:57:53 +0100

I wanted to document %printer, and the cleanest was
to integrate it in one of our examples.  But I wanted
to be able to run the examples, so that safest, simplest
(but not fastest) way to do it is to extract the said
example, and exercise %printer by hand before integrating
the result in the doc.

This revealed a couple of weaknesses in the code in the
doc.

From f9c75dd016198f9b8c255f1bb139360eef3f071f Mon Sep 17 00:00:00 2001
From: Akim Demaille <address@hidden>
Date: Thu, 16 Feb 2012 15:07:23 +0100
Subject: [PATCH 2/5] doc: fix mfcalc code.

        * doc/bison.texinfo (Multi-function Calc): Add missing includes.
        Fix the rendering of the result: use @result and remove the
        initial tabulation in the actual code.
        Fix stylistic issues: avoid the , operator.
        Add extexi mark-up.
        * examples/extexi: Also support @smallexample.
---
 doc/bison.texinfo |   50 ++++++++++++++++++++++++++++++++------------------
 examples/extexi   |    6 +++---
 2 files changed, 35 insertions(+), 21 deletions(-)

diff --git a/doc/bison.texinfo b/doc/bison.texinfo
index 836733d..8391e71 100644
--- a/doc/bison.texinfo
+++ b/doc/bison.texinfo
@@ -2300,17 +2300,17 @@ Here is a sample session with the multi-function 
calculator:
 @example
 $ @kbd{mfcalc}
 @kbd{pi = 3.141592653589}
-3.1415926536
address@hidden 3.1415926536
 @kbd{sin(pi)}
-0.0000000000
address@hidden 0.0000000000
 @kbd{alpha = beta1 = 2.3}
-2.3000000000
address@hidden 2.3000000000
 @kbd{alpha}
-2.3000000000
address@hidden 2.3000000000
 @kbd{ln(alpha)}
-0.8329091229
address@hidden 0.8329091229
 @kbd{exp(ln(beta1))}
-2.3000000000
address@hidden 2.3000000000
 $
 @end example
 
@@ -2327,11 +2327,12 @@ Note that multiple assignment and nested function calls 
are permitted.
 
 Here are the C and Bison declarations for the multi-function calculator.
 
address@hidden file: mfcalc.y
 @smallexample
 @group
 address@hidden
-  #include <math.h>  /* For math functions, cos(), sin(), etc.  */
-  #include "calc.h"  /* Contains definition of `symrec'.  */
+  #include <stdio.h>  /* For printf, etc. */
+  #include "calc.h"   /* Contains definition of `symrec'.  */
   int yylex (void);
   void yyerror (char const *);
 address@hidden
@@ -2385,6 +2386,7 @@ Here are the grammar rules for the multi-function 
calculator.
 Most of them are copied directly from @code{calc}; three rules,
 those which mention @code{VAR} or @code{FNCT}, are new.
 
address@hidden file: mfcalc.y
 @smallexample
 @group
 input:   /* empty */
@@ -2395,8 +2397,8 @@ input:   /* empty */
 @group
 line:
           '\n'
-        | exp '\n'   @{ printf ("\t%.10g\n", $1); @}
-        | error '\n' @{ yyerrok;                  @}
+        | exp '\n'   @{ printf ("%.10g\n", $1); @}
+        | error '\n' @{ yyerrok;                @}
 ;
 @end group
 
@@ -2431,6 +2433,7 @@ The symbol table itself consists of a linked list of 
records.  Its
 definition, which is kept in the header @file{calc.h}, is as follows.  It
 provides for either functions or variables to be placed in the table.
 
address@hidden file: calc.h
 @smallexample
 @group
 /* Function type.  */
@@ -2467,6 +2470,7 @@ The new version of @code{main} includes a call to 
@code{init_table}, a
 function that initializes the symbol table.  Here it is, and
 @code{init_table} as well:
 
address@hidden file: mfcalc.y
 @smallexample
 #include <stdio.h>
 
@@ -2488,15 +2492,16 @@ struct init
 @end group
 
 @group
+#include <math.h>  /* Math functions, cos(), sin(), etc.  */
 struct init const arith_fncts[] =
 @{
-  "sin",  sin,
-  "cos",  cos,
-  "atan", atan,
-  "ln",   log,
-  "exp",  exp,
-  "sqrt", sqrt,
-  0, 0
+  @{ "atan", atan @},
+  @{ "cos",  cos  @},
+  @{ "exp",  exp  @},
+  @{ "ln",   log  @},
+  @{ "sin",  sin  @},
+  @{ "sqrt", sqrt @},
+  @{ 0, 0 @},
 @};
 @end group
 
@@ -2507,6 +2512,7 @@ symrec *sym_table;
 
 @group
 /* Put arithmetic functions in table.  */
+static
 void
 init_table (void)
 @{
@@ -2540,7 +2546,11 @@ linked to the front of the list, and a pointer to the 
object is returned.
 The function @code{getsym} is passed the name of the symbol to look up.  If
 found, a pointer to that symbol is returned; otherwise zero is returned.
 
address@hidden file: mfcalc.y
 @smallexample
+#include <stdlib.h> /* malloc. */
+#include <string.h> /* strlen. */
+
 symrec *
 putsym (char const *sym_name, int sym_type)
 @{
@@ -2582,6 +2592,7 @@ returned to @code{yyparse}.
 No change is needed in the handling of numeric values and arithmetic
 operators in @code{yylex}.
 
address@hidden file: mfcalc.y
 @smallexample
 @group
 #include <ctype.h>
@@ -2624,7 +2635,10 @@ yylex (void)
       /* Initially make the buffer long enough
          for a 40-character symbol name.  */
       if (length == 0)
-        length = 40, symbuf = (char *)malloc (length + 1);
+        @{
+          length = 40;
+          symbuf = (char *) malloc (length + 1);
+        @}
 
       i = 0;
       do
diff --git a/examples/extexi b/examples/extexi
index 0ac5c8a..efce4e5 100644
--- a/examples/extexi
+++ b/examples/extexi
@@ -52,11 +52,11 @@ BEGIN {
     }
 }
 
-/address@hidden/, /address@hidden example$/ {
+/^@(small)?example$/, /address@hidden (small)?example$/ {
   if (!file)
     next;
 
-  if ($0 ~ /address@hidden/)
+  if ($0 ~ /^@(small)?example$/)
     {
       input = files_output[file] ? "\n" : "";
 
@@ -69,7 +69,7 @@ BEGIN {
       next;
     }
 
-  if ($0 ~ /address@hidden example$/)
+  if ($0 ~ /address@hidden (small)?example$/)
     {
       if (input == "")
         fatal("no contents: " file);
-- 
1.7.9





reply via email to

[Prev in Thread] Current Thread [Next in Thread]