% (find-LATEX "2021burghardt.tex")
% (defun c () (interactive) (find-LATEXsh "lualatex -record 2021burghardt.tex" :end))
% (defun C () (interactive) (find-LATEXSH "lualatex 2021burghardt.tex" "Success!!!"))
% (defun D () (interactive) (find-pdf-page      "~/LATEX/2021burghardt.pdf"))
% (defun d () (interactive) (find-pdftools-page "~/LATEX/2021burghardt.pdf"))
% (defun e () (interactive) (find-LATEX "2021burghardt.tex"))
% (defun u () (interactive) (find-latex-upload-links "2021burghardt"))
% (defun v () (interactive) (find-2a '(e) '(d)))
% (defun b () (interactive) (find-2a '(e) '(find-fline "/tmp/b.jpg")))
% (defun cv () (interactive) (C) (ee-kill-this-buffer) (v) (g))
% (defun d0 () (interactive) (find-ebuffer "2021burghardt.pdf"))
%          (code-eec-LATEX "2021burghardt")
% (find-pdf-page   "~/LATEX/2021burghardt.pdf")
% (find-xournalpp  "~/LATEX/2021burghardt.pdf")
% (find-sh0 "cp -v  ~/LATEX/2021burghardt.pdf /tmp/")
% (find-sh0 "cp -v  ~/LATEX/2021burghardt.pdf /tmp/pen/")
%   file:///home/edrx/LATEX/2021burghardt.pdf
%               file:///tmp/2021burghardt.pdf
%           file:///tmp/pen/2021burghardt.pdf
% http://angg.twu.net/LATEX/2021burghardt.pdf
% (find-LATEX "2019.mk")
% (find-lualatex-links "2021burghardt")

% https://en.wikipedia.org/wiki/Backus-Naur_form
% https://en.wikipedia.org/wiki/Backus-Naur_form#Further_examples
% https://en.wikipedia.org/wiki/Syntax_diagram
% https://en.wikipedia.org/wiki/Extended_Backus-Naur_form
% https://en.wikipedia.org/wiki/Context-free_grammar 
% (find-books "__comp/__comp.el" "kernighan-ritchie")
% (find-books "__comp/__comp.el" "thain")
% (find-es "dednat" "burghardt")

% «.tree»	(to "tree")

\documentclass[oneside,12pt]{article}
\usepackage[colorlinks,citecolor=DarkRed,urlcolor=DarkRed]{hyperref} % (find-es "tex" "hyperref")
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{pict2e}
\usepackage[x11names,svgnames]{xcolor} % (find-es "tex" "xcolor")
%\usepackage{colorweb}                 % (find-es "tex" "colorweb")
%\usepackage{tikz}
%
% (find-dn6 "preamble6.lua" "preamble0")
\usepackage{proof}   % For derivation trees ("%:" lines)
%\input diagxy        % For 2D diagrams ("%D" lines)
%\xyoption{curve}     % For the ".curve=" feature in 2D diagrams
%
\usepackage{edrx21}               % (find-LATEX "edrx21.sty")
\input edrxaccents.tex            % (find-LATEX "edrxaccents.tex")
\input edrxchars.tex              % (find-LATEX "edrxchars.tex")
\input edrxheadfoot.tex           % (find-LATEX "edrxheadfoot.tex")
\input edrxgac2.tex               % (find-LATEX "edrxgac2.tex")
%
% (find-es "tex" "geometry")
\begin{document}

\catcode`\^^J=10
\directlua{dofile "dednat6load.lua"}  % (find-LATEX "dednat6load.lua")

\thispagestyle{empty}

\def\NT<#1>{〈\textsf{#1}〉}
\def\T#1{\ColorRed{\tt#1}}
\def\T#1{\mathstrut \ColorRed{\tt#1}}


Adapted from:

\url{https://en.wikipedia.org/wiki/Context-free_grammar}

\bsk
\bsk

$\begin{array}{rcl}
     \NT<Stmt> &→& \NT<Id> \; \T{=} \; \NT<Expr> \; \T{;} \\
     \NT<Stmt> &→& \T{\{} \; \NT<StmtList> \; \T{\}} \\
     \NT<Stmt> &→& \T{if} \; \T{(} \; \NT<Expr> \; \T{)} \; \NT<Stmt> \\
 \NT<StmtList> &→& \NT<Stmt> \\
 \NT<StmtList> &→& \NT<StmtList> \NT<Stmt> \\
     \NT<Expr> &→& \NT<Id> \\
     \NT<Expr> &→& \NT<Num> \\
     \NT<Expr> &→& \NT<Expr> \; \NT<Optr> \; \NT<Expr> \\
       \NT<Id> &→& \T{x} \\
       \NT<Id> &→& \T{y} \\
      \NT<Num> &→& \T{0} \\
      \NT<Num> &→& \T{1} \\
      \NT<Num> &→& \T{9} \\
     \NT<Optr> &→& \T{>} \\
     \NT<Optr> &→& \T{+} \\
 \end{array}
$


% «tree»  (to ".tree")
%:
%:                                                             \T{0}
%:                                                           --------
%:                                              \T{x}        \NT<Num>                         \T{y}     \T{+}      \T{1}
%:                                             -------       ---------                      --------- --------- ---------    
%:                                             \NT<Id> \T{=} \NT<Expr> \T{;}   \T{y}        \NT<Expr> \NT<Optr> \NT<Expr>
%:                                             -----------------------------  -------       -----------------------------
%:                 \T{x}                \T{9}          \NT<Stmt>              \NT<Id> \T{=}           \NT<Expr>            \T{;}
%:                -------             --------         -------------          --------------------------------------------------
%:                \NT<Id>     \T{>}   \NT<Num>  \T{\{} \NT<StmtList>                \NT<Stmt>                                    \T{\}}
%:                --------- --------- --------- ---------------------------------------------------------------------------------------
%:                \NT<Expr> \NT<Optr> \NT<Expr>       \NT<StmtList>
%:                -----------------------------       -------------
%:   \T{if} \T{(} \NT<Expr>                     \T{)} \NT<Stmt>
%:   ----------------------------------------------------------
%:         \NT<Stmt>
%:
%:         ^Bur-tree
%:
\pu
%\hspace*{-4cm}
%$\ded{Bur-tree}$

$\scalebox{0.7}{$
 \ded{Bur-tree}
 $}
$


\def\und#1#2{\underbrace{#1}_{\textstyle#2}}

%L -- (find-es "dednat" "burghardt")
%L -- (find-angg "LUA/Rect.lua" "undtolatex")
%L 
%L undtolatex = function (o, pre)
%L     if type(o) == "string" then return o end
%L     if type(o) == "number" then return tostring(o) end
%L     if type(o) == "table" and #o == 0 then return o[0] end
%L     local s = "     "
%L     local f = function (o) return undtolatex(o, pre..s).."\n"..pre..s end
%L     pre = pre or ""
%L     local upper = mapconcat(f, o, "")
%L     local lower = "}{"..o[0].."}"
%L     return "\\und{"..upper..lower
%L   end
%L 
%L caretsegs = {}
%L for n,segments in pairs(allsegments) do
%L   local seg = segments[1]
%L   if seg and seg.t:match("^^") then print(seg); caretsegs[seg.t] = seg end
%L end
%L caretseg = caretsegs["^Bur-tree"]
%L tree = caretseg:rootnode():totreenode()
%L defbody = undtolatex(tree)
%L deffull = "\\def\\BurUnd{\n"..defbody.."\n}"
%L output(deffull)
\pu

\bsk
\bsk

% Slightly changed version:
%
\def\BurUnd{
\und{\T{if}
     \;\;
     \T{(}
     \und{\und{\und{\T{x}
                    }{\NT<Id>}
               }{\NT<Expr>}
          \und{\T{>}
               }{\NT<Optr>}
          \und{\und{\T{9}
                    }{\NT<Num>}
               }{\NT<Expr>}
          }{\NT<Expr>}
     \T{)}
     \;
     \und{\und{\T{\{}
               \und{\und{\und{\T{x}
                              }{\NT<Id>}
                         \T{=}
                         \und{\und{\T{0}
                                   }{\NT<Num>}
                              }{\NT<Expr>}
                         \T{;}
                         }{\NT<Stmt>}
                    }{\NT<StmtList>}
               \und{\und{\T{y}
                         }{\NT<Id>}
                    \T{=}
                    \und{\und{\T{y}
                              }{\NT<Expr>}
                         \und{\T{+}
                              }{\NT<Optr>}
                         \und{\T{1}
                              }{\NT<Expr>}
                         }{\NT<Expr>}
                    \T{;}
                    }{\NT<Stmt>}
               \;
               \T{\}}
               }{\NT<StmtList>}
          }{\NT<Stmt>}
     }{\NT<Stmt>}
}

$\BurUnd$


\GenericWarning{Success:}{Success!!!}  % Used by `M-x cv'

\end{document}

%  __  __       _        
% |  \/  | __ _| | _____ 
% | |\/| |/ _` | |/ / _ \
% | |  | | (_| |   <  __/
% |_|  |_|\__,_|_|\_\___|
%                        
% <make>

 (eepitch-shell)
 (eepitch-kill)
 (eepitch-shell)
# (find-LATEXfile "2019planar-has-1.mk")
make -f 2019.mk STEM=2021burghardt veryclean
make -f 2019.mk STEM=2021burghardt pdf

 (eepitch-shell)
 (eepitch-kill)
 (eepitch-shell)
cd /tmp/
wget -O b.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/C_grammar_example_derivation.pdf/page1-800px-C_grammar_example_derivation.pdf.jpg

# (find-fline "/tmp/b.jpg")

% Local Variables:
% coding: utf-8-unix
% ee-tla: "NONE"
% End:
