Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
#######
#
# E-scripts on Lex/Flex and Yacc/Bison.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/lexyacc.e>
#           or at <http://angg.twu.net/e/lexyacc.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######






# «.flex»		(to "flex")
# «.eeflex»		(to "eeflex")
# «.bison»		(to "bison")
# «.bison_calcs»	(to "bison_calcs")
# «.precedence»		(to "precedence")



# (find-htetfile "Lex-YACC-HOWTO.gz")




#####
#
# flex
# 2001jan21
#
#####

# «flex»  (to ".flex")
# (find-status "flex")
# (find-vldifile "flex.list")
# (find-fline "/usr/doc/flex/")
# (find-fline "/usr/doc/flex/NEWS.gz" "start condition scope")

# (find-node "(flex)Simple Examples")
# (find-node "(flex)Format")
# (find-node "(flex)Definitions Section" "_indented_")
# (find-node "(flex)Rules Section")
# (find-node "(flex)User Code Section")
# (find-node "(flex)Options" "including `%option' directives")
# (find-node "(flex)Generated scanner" "your own version of `yywrap()'")

#*
zcatinfo /usr/info/flex > /tmp/flex.info
zcatinfo /usr/share/info/bison > /tmp/bison.info
# (find-fline "/tmp/flex.info")
# (find-fline "/tmp/bison.info")

#*
rm -Rv /tmp/lex/
mkdir  /tmp/lex/
cd     /tmp/lex/

cat > wc.lex <<'---'
%option noyywrap
 int num_lines = 0, num_chars = 0;
%%
\n      ++num_lines; ++num_chars;
.       ++num_chars;
%%
main() {
  yylex();
  printf("%7d lines, %d chars\n", num_lines, num_chars);
}
---
flex wc.lex
gcc  lex.yy.c
./a.out < wc.lex
wc wc.lex

# (find-fline "/tmp/lex/")
# (find-fline "/tmp/lex/lex.yy.c")

#*





#####
#
# eeflex
# 2004nov06
#
#####

# «eeflex»  (to ".eeflex")
#*
rm -Rv /tmp/lex/
mkdir  /tmp/lex/
cd     /tmp/lex/

eeflex -g <<'---'
%option noyywrap
 int num_lines = 0, num_chars = 0;
%%
\n      ++num_lines; ++num_chars;
.       ++num_chars;
%%
main() {
  yylex();
  printf("%7d lines, %d chars\n", num_lines, num_chars);
}
---
eec < $EEVTMPDIR/ee.l

wc    $EEVTMPDIR/ee.l

#*





#####
#
# bison
# 2001jan20
#
#####

# «bison»  (to ".bison")
# (find-status "bison")
# (find-vldifile "bison.list")
# (find-fline "/usr/share/doc/bison/")
#*
pdsc $SDEBIAN/dists/potato/main/source/devel/bison_1.28-5.dsc
cd /usr/src/bison-1.28/
#*
# (code-c-d "bison" "/usr/src/bison-1.28/")
# (find-bisonfile "")




#####
#
# bison demos: rpcalc and calc
# 2001jan20
#
#####

# «bison_calcs»  (to ".bison_calcs")
# (find-node "(bison)Infix Calc")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
#*
rm -Rv /tmp/bison/
mkdir  /tmp/bison/
cd     /tmp/bison/

cat > rpcalc.y- <<'---'
%{
#define YYSTYPE double
#include <math.h>
%}
%token NUM

%% /* Grammar rules and actions follow */
input:    /* empty */
        | input line
;
line:     '\n'
        | exp '\n'  { printf ("\t%.10g\n", $1); }
;
exp:      NUM             { $$ = $1;         }
        | exp exp '+'     { $$ = $1 + $2;    }
        | exp exp '-'     { $$ = $1 - $2;    }
        | exp exp '*'     { $$ = $1 * $2;    }
        | exp exp '/'     { $$ = $1 / $2;    }
      /* Exponentiation */
        | exp exp '^'     { $$ = pow ($1, $2); }
      /* Unary minus    */
        | exp 'n'         { $$ = -$1;        }
;
%%
---

cat > calc.y- <<'---'
%{
#define YYSTYPE double
#include <math.h>
%}
/* BISON Declarations */
%token NUM
%left '-' '+'
%left '*' '/'
%left NEG     /* negation--unary minus */
%right '^'    /* exponentiation        */
/* Grammar follows */

%%
input:    /* empty string */
        | input line
;
line:     '\n'
        | exp '\n'   { printf ("\t%.10g\n", $1); }
        | error '\n' { yyerrok;                  }
;
exp:      NUM                { $$ = $1;         }
        | exp '+' exp        { $$ = $1 + $3;    }
        | exp '-' exp        { $$ = $1 - $3;    }
        | exp '*' exp        { $$ = $1 * $3;    }
        | exp '/' exp        { $$ = $1 / $3;    }
        | '-' exp  %prec NEG { $$ = -$2;        }
        | exp '^' exp        { $$ = pow ($1, $3); }
        | '(' exp ')'        { $$ = $2;         }
;
%%
---

cat > calc_common.y- <<'---'
/* Lexical analyzer returns a double floating point
   number on the stack and the token NUM, or the ASCII
   character read if not a number.  Skips all blanks
   and tabs, returns 0 for EOF. */
#include <ctype.h>
#include <stdio.h>
yylex () {
  int c;
  /* skip white space  */
  while ((c = getchar ()) == ' ' || c == '\t')
    ;
  /* process numbers   */
  if (c == '.' || isdigit (c)) {
    ungetc (c, stdin);
    scanf ("%lf", &yylval);
    return NUM;
  }
  /* return end-of-file  */
  if (c == EOF)
    return 0;
  /* return single chars */
  return c;
}
main () {
  yyparse ();
}
#include <stdio.h>
/* Called by yyparse on error: */
yyerror (char *s) {
  printf ("%s\n", s);
}
---

(cat rpcalc.y-; echo; cat calc_common.y-) > rpcalc.y
(cat   calc.y-; echo; cat calc_common.y-) >   calc.y

bison rpcalc.y
gcc rpcalc.tab.c -lm -o rpcalc

bison calc.y
gcc calc.tab.c -lm -o calc

./rpcalc <<'---'
4 9 +
3 7 + 3 4 5 *+-
3 7 + 3 4 5 * + - n
5 6 / 4 n +
3 4 ^
---

./calc <<'---'
4 + 4.5 - (34/(8*3+-3))
-56 + 2
3 ^ 2
---
#*

# (find-fline "/tmp/bison/")
# (find-node "(bison)")
# (find-bisonnode "Rpcalc Declarations")
# (find-bisonnode "Rpcalc Generate")





#####
#
# Precedence
# 2011dec24
#
#####

# «precedence»  (to ".precedence")
# (find-es "ml" "levy")
# (find-bisonnode "Precedence Decl")







# (find-status   "bison")
# (find-vldifile "bison.list")
# (find-udfile   "bison/")
# (find-status   "bison-doc")
# (find-vldifile "bison-doc.list")
# (find-udfile   "bison-doc/")
# (find-status   "flex")
# (find-vldifile "flex.list")
# (find-udfile   "flex/")
# (find-status   "flex-doc")
# (find-vldifile "flex-doc.list")
# (find-udfile   "flex-doc/")

# (find-node "(bison)Algorithm" "shifting")
# (find-node "(bison)Algorithm" "reduced")
# (find-node "(bison)Lookahead" "!")








#  Local Variables:
#  coding:               no-conversion
#  ee-delimiter-hash:    "\n#*\n"
#  ee-delimiter-percent: "\n%*\n"
#  ee-anchor-format:     "«%s»"
#  ee-charset-indicator: "Ñ"
#  End: