Changeset e55ca05


Ignore:
Timestamp:
Apr 9, 2016, 10:04:50 AM (8 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
Children:
37218fc, df2be83
Parents:
9827c7ba
Message:

fix bibliography for manuals, refactor common LaTeX macros

Location:
doc
Files:
2 added
2 deleted
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • doc/refrat/Makefile

    r9827c7ba re55ca05  
    11## Define the appropriate configuration variables.
    22
    3 Macros =
    4 TeXLIB = .:${Macros}:
     3TeXLIB = .:../bibliography/:../LaTeXmacros/:
    54LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    6 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
     5BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
    76
    87## Define the text source files.
     
    4443        dvips $< -o $@
    4544
    46 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib
     45${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
     46                ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
    4747        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
    4848        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
     
    5454        -${BibTeX} ${basename $@}
    5555        # Make index from *.aux entries and input index at end of document
    56         makeindex -s indexstyle ${basename $@}.idx
     56        makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx
    5757        ${LaTeX} ${basename $@}.tex
    5858        # Run again to get index title into table of contents
  • doc/refrat/refrat.tex

    r9827c7ba re55ca05  
    1111%% Created On       : Wed Apr  6 14:52:25 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Wed Apr  6 21:57:27 2016
    14 %% Update Count     : 2
     13%% Last Modified On : Fri Apr  8 18:32:07 2016
     14%% Update Count     : 6
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    3636%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    3737
    38 % Names used in the document.
    39 
    40 \newcommand{\CFA}{C$\mathbf\forall$\xspace}     % set language symbolic name
    41 \newcommand{\CFL}{Cforall\xspace}               % set language text name
    42 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
    43 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
    44 
    45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    46 
    4738% Bespoke macros used in the document.
    48 
    49 \makeatletter
    50 % allow escape sequence in lstinline
    51 %\usepackage{etoolbox}
    52 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
    53 
    54 \renewcommand\small{%
    55    \@setfontsize\small{8.5}{11}%
    56    \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt
    57    \abovedisplayshortskip \z@ \@plus 2pt
    58    \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt
    59    \def\@listi{\leftmargin\leftmargini
    60                \topsep 4pt \@plus 2pt \@minus 2pt
    61                \parsep 2pt \@pluspt \@minuspt
    62                \itemsep \parsep}%
    63    \belowdisplayskip \abovedisplayskip
    64 }
    65 \usepackage{relsize}            % must be after change to small
    66 
    67 \renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
    68 \renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
    69 
    70 %  Reduce size of chapter/section titles
    71 \def\@makechapterhead#1{%
    72   \vspace*{50\p@}%
    73   {\parindent \z@ \raggedright \normalfont
    74     \ifnum \c@secnumdepth >\m@ne
    75         \large\bfseries \@chapapp\space \thechapter
    76         \par\nobreak
    77         \vskip 5\p@
    78     \fi
    79     \interlinepenalty\@M
    80     \Large \bfseries #1\par\nobreak
    81     \vskip 50\p@
    82   }}
    83 \def\@makeschapterhead#1{%
    84   \vspace*{50\p@}%
    85   {\parindent \z@ \raggedright
    86     \normalfont
    87     \interlinepenalty\@M
    88     \Large \bfseries  #1\par\nobreak
    89     \vskip 50\p@
    90   }}
    91 \renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
    92 \renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    93 \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    94 \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
    95 
    96 % index macros
    97 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
    98 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
    99 \newcommand{\see}[1]{\emph{see} #1}
    100 
    101 % Define some commands that produce formatted index entries suitable for cross-references.
    102 % ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
    103 % implementations, and ``\use'' for their uses.
    104 
    105 %  \newcommand{\bold}[1]{{\bf #1}}
    106 %  \def\spec{\@bsphack\begingroup
    107 %             \def\protect##1{\string##1\space}\@sanitize
    108 %             \@wrxref{|bold}}
    109 \def\impl{\@bsphack\begingroup
    110           \def\protect##1{\string##1\space}\@sanitize
    111           \@wrxref{|definition}}
    112 \newcommand{\indexcode}[1]{{\lstinline$#1$}}
    113 \def\use{\@bsphack\begingroup
    114          \def\protect##1{\string##1\space}\@sanitize
    115          \@wrxref{|hyperpage}}
    116 \def\@wrxref#1#2{\let\thepage\relax
    117     \xdef\@gtempa{\write\@indexfile{\string
    118     \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
    119     \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
    120 %\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
    121 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
    122 
    123 % inline text and lowercase index: \Index{inline and lowercase index text}
    124 % inline text and as-in index: \Index[as-is index text]{inline text}
    125 % inline text but index with different as-is text: \Index[index text]{inline text}
    126 \newcommand{\Index}{\@ifstar\@sIndex\@Index}
    127 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    128 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
    129 \makeatother
    130 
    131 % blocks and titles
    132 \newenvironment{rationale}{%
    133   \begin{quotation}\noindent$\Box$\enspace
    134 }{%
    135   \hfill\enspace$\Box$\end{quotation}
    136 }%
    137 \newcommand{\define}[1]{\emph{#1\/}\index{#1}}
    138 \newcommand{\rewrite}{\(\Rightarrow\)}
    139 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
    140 \newcommand{\examples}{\paragraph{Examples}~\par\noindent}
    141 \newcommand{\semantics}{\paragraph{Semantics}~\par\noindent}
    142 \newcommand{\constraints}{\paragraph{Constraints}~\par\noindent}
    143 \newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent}
    144 
    145 % BNF macros
    146 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
    147 \let\endsyntax=\endtrivlist
    148 \newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
    149 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
    150 \newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
    151 \newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
    152 \newcommand{\opt}{$_{opt}$\ }
    153 
    154 % adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers
    155 % \VRef{label} => Section 2.7, \VPageref{label} => page 17
    156 % \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17
    157 \renewcommand{\reftextfaceafter}{\unskip}
    158 \renewcommand{\reftextfacebefore}{\unskip}
    159 \renewcommand{\reftextafter}{\unskip}
    160 \renewcommand{\reftextbefore}{\unskip}
    161 \renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}}
    162 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
    163 \newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
    164 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    165 
    166 % CFA based on ANSI C
    167 \lstdefinelanguage{CFA}[ANSI]{C}%
    168 {morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto,
    169     _Bool,catch,catchResume,choose,_Complex,__complex,__complex__,__const,__const__,disable,dtype,enable,__extension__,
    170         fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,otype,restrict,_Static_assert,
    171         _Thread_local,throw,throwResume,trait,try,typeof,__typeof,__typeof__,},
    172 }%
    173 
    174 \lstset{
    175 language=CFA,
    176 columns=flexible,
    177 basicstyle=\sf\relsize{-1},
    178 tabsize=4,
    179 xleftmargin=\parindent,
    180 escapechar=@,
    181 mathescape=true,
    182 keepspaces=true,
    183 showstringspaces=false,
    184 showlines=true,
    185 aboveskip=6pt,
    186 belowskip=4pt,
    187 }%
    188 
    189 \makeatletter
    190 % replace/adjust listings characters that look bad in sanserif
    191 \lst@CCPutMacro
    192 \lst@ProcessOther{"22}{\lst@ttfamily{"}{\raisebox{0.3ex}{\ttfamily\upshape "}}} % replace double quote
    193 \lst@ProcessOther{"27}{\lst@ttfamily{'}{\raisebox{0.3ex}{\ttfamily\upshape '\hspace*{-2pt}}}} % replace single quote
    194 \lst@ProcessOther{"2D}{\lst@ttfamily{-}{\ttfamily\upshape -}} % replace minus
    195 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
    196 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
    197 \lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex
    198 \lst@ProcessOther{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
    199 \lst@ProcessOther{"60}{\lst@ttfamily{`}{\raisebox{0.3ex}{\ttfamily\upshape \hspace*{-2pt}`}}} % replace backquote
    200 \lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde
    201 %\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
    202 \@empty\z@\@empty
    203 \makeatother
     39\input{common}
    20440
    20541\setcounter{secnumdepth}{3}     % number subsubsections
     
    24884
    24985This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language.
    250 It makes frequent reference to the {\c11} standard \cite{ANS:C11}, and occasionally compares \CFA to {\CC} \cite{c++}.
     86It makes frequent reference to the {\c11} standard \cite{C11}, and occasionally compares \CFA to {\CC} \cite{C++}.
    25187
    25288The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs).
     
    742578
    743579There are two notable differences between \CFA's overload resolution rules and the rules for
    744 {\CC} defined in \cite{c++}.
     580{\CC} defined in \cite{C++}.
    745581First, the result type of a function plays a role.
    746582In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances.
     
    34063242\begin{itemize}
    34073243\item
    3408 Inside a Clu cluster \cite{clu}, the declaration of an instance states which view applies.
     3244Inside a Clu cluster \cite{CLU}, the declaration of an instance states which view applies.
    34093245Two primitives called \lstinline$up$ and \lstinline$down$ can be used to convert between the views.
    34103246\item
    3411 The Simula class \cite{Simula87} is essentially a record type.
     3247The Simula class \cite{SIMULA87} is essentially a record type.
    34123248Since the only operations on a record are member selection and assignment, which can not be overloaded, there is never any ambiguity as to whether the abstraction or the implementation view is being used.
    34133249In {\CC}
    3414 \cite{c++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded.
     3250\cite{C++}, operations on class instances include assignment and ``\lstinline$&$'', which can be overloaded.
    34153251A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used.
    34163252\item
    3417 An Ada derived type definition \cite{ada} creates a new type from an old type, and also implicitly declares derived subprograms that correspond to the existing subprograms that use the old type as a parameter type or result type.
     3253An Ada derived type definition \cite{Ada} creates a new type from an old type, and also implicitly declares derived subprograms that correspond to the existing subprograms that use the old type as a parameter type or result type.
    34183254The derived subprograms are clones of the existing subprograms with the old type replaced by the derived type.
    34193255Literals and aggregates of the old type are also cloned.
     
    40283864
    40293865\bibliographystyle{plain}
    4030 \bibliography{refrat}
     3866\bibliography{cfa}
    40313867
    40323868
  • doc/user/Makefile

    r9827c7ba re55ca05  
    11## Define the appropriate configuration variables.
    22
    3 TeXLIB = .::
     3TeXLIB = .:../bibliography/:../LaTeXmacros/:
    44LaTeX  = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex
    5 BibTeX = BSTINPUTS=${TeXLIB} && export BSTINPUTS && bibtex
     5BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex
    66
    77## Define the text source files.
     
    4343        dvips $< -o $@
    4444
    45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex ${basename ${DOCUMENT}}.bib /usr/local/bibliographies/pl.bib
     45${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \
     46                ../LaTeXmacros/common.tex ../LaTeXmacros/indexstyle ../bibliography/cfa.bib
    4647        # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run.
    4748        if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi
     
    5354        -${BibTeX} ${basename $@}
    5455        # Make index from *.aux entries and input index at end of document
    55         makeindex -s indexstyle ${basename $@}.idx
     56        makeindex -s ../LaTeXmacros/indexstyle ${basename $@}.idx
    5657        ${LaTeX} ${basename $@}.tex
    5758        # Run again to get index title into table of contents
  • doc/user/user.tex

    r9827c7ba re55ca05  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Wed Apr  6 17:37:39 2016
    14 %% Update Count     : 34
     13%% Last Modified On : Fri Apr  8 11:40:53 2016
     14%% Update Count     : 42
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    4343% Names used in the document.
    4444
    45 \newcommand{\CFA}{C$\mathbf\forall$\xspace}     % set language symbolic name
    46 \newcommand{\CFL}{Cforall\xspace}               % set language text name
    47 \newcommand{\CC}{C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name
    48 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name)
    4945\newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace}
    5046
     
    5248
    5349% Bespoke macros used in the document.
    54 
    55 \makeatletter
    56 % allow escape sequence in lstinline
    57 %\usepackage{etoolbox}
    58 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}}
    59 
    60 \renewcommand\small{%
    61    \@setfontsize\small{8.5}{11}%
    62    \abovedisplayskip 8.5pt \@plus 3pt \@minus 4pt
    63    \abovedisplayshortskip \z@ \@plus 2pt
    64    \belowdisplayshortskip 4pt \@plus 2pt \@minus 2pt
    65    \def\@listi{\leftmargin\leftmargini
    66                \topsep 4pt \@plus 2pt \@minus 2pt
    67                \parsep 2pt \@pluspt \@minuspt
    68                \itemsep \parsep}%
    69    \belowdisplayskip \abovedisplayskip
    70 }
    71 \usepackage{relsize}            % must be after change to small
    72 
    73 \renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
    74 \renewenvironment{itemize}{\begin{list}{\labelitemi}{\topsep=5pt\itemsep=5pt\parsep=0pt}}{\end{list}}
    75 
    76 %  Reduce size of section titles
    77 \renewcommand\section{\@startsection{section}{1}{\z@}{-3.0ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\large\bfseries}}
    78 \renewcommand\subsection{\@startsection{subsection}{2}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    79 \renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex \@plus -1ex \@minus -.2ex}{1.0ex \@plus .2ex}{\normalfont\normalsize\bfseries}}
    80 \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{-2.0ex \@plus -1ex \@minus -.2ex}{-1em}{\normalfont\normalsize\bfseries}}
    81 
    82 % index macros
    83 \newcommand{\italic}[1]{\emph{\hyperpage{#1}}}
    84 \newcommand{\definition}[1]{\textbf{\hyperpage{#1}}}
    85 \newcommand{\see}[1]{\emph{see} #1}
    86 
    87 % Define some commands that produce formatted index entries suitable for cross-references.
    88 % ``\spec'' produces entries for specifications of entities.  ``\impl'' produces entries for their
    89 % implementations, and ``\use'' for their uses.
    90 
    91 %  \newcommand{\bold}[1]{{\bf #1}}
    92 %  \def\spec{\@bsphack\begingroup
    93 %             \def\protect##1{\string##1\space}\@sanitize
    94 %             \@wrxref{|bold}}
    95 \def\impl{\@bsphack\begingroup
    96           \def\protect##1{\string##1\space}\@sanitize
    97           \@wrxref{|definition}}
    98 \newcommand{\indexcode}[1]{{\lstinline$#1$}}
    99 \def\use{\@bsphack\begingroup
    100          \def\protect##1{\string##1\space}\@sanitize
    101          \@wrxref{|hyperpage}}
    102 \def\@wrxref#1#2{\let\thepage\relax
    103     \xdef\@gtempa{\write\@indexfile{\string
    104     \indexentry{#2@{\lstinline$#2$}#1}{\thepage}}}\endgroup\@gtempa
    105     \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
    106 %\newcommand{\use}[1]{\index{#1@{\lstinline$#1$}}}
    107 %\newcommand{\impl}[1]{\index{\protect#1@{\lstinline$\protect#1$}|definition}}
    108 
    109 % inline text and lowercase index: \Index{inline and lowercase index text}
    110 % inline text and as-in index: \Index[as-is index text]{inline text}
    111 % inline text but index with different as-is text: \Index[index text]{inline text}
    112 \newcommand{\Index}{\@ifstar\@sIndex\@Index}
    113 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    114 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
    115 
    116 \newcommand{\newtermFontInline}{\emph}
    117 \newcommand{\newterm}{\@ifstar\@snewterm\@newterm}
    118 \newcommand{\@newterm}[2][\@empty]{\lowercase{\def\temp{#2}}{\newtermFontInline{#2}}\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}
    119 \newcommand{\@snewterm}[2][\@empty]{{\newtermFontInline{#2}}\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi}
    120 \makeatother
    121 
    122 % blocks and titles
    123 \newenvironment{quote2}{%
    124         \list{}{\lstset{resetmargins=true}\leftmargin=\parindent\rightmargin\leftmargin}%
    125         \item\relax
    126 }{%
    127         \endlist
    128 }% quote2
    129 \newenvironment{rationale}{%
    130   \begin{quotation}\noindent$\Box$\enspace
    131 }{%
    132   \hfill\enspace$\Box$\end{quotation}
    133 }%
    134 \newcommand{\define}[1]{\emph{#1\/}\index{#1}}
    135 \newcommand{\rewrite}{\(\Rightarrow\)}
    136 \newcommand{\rewriterules}{\paragraph{Rewrite Rules}~\par\noindent}
    137 \newcommand{\examples}{\paragraph{Examples}~\par\noindent}
    138 \newcommand{\semantics}{\paragraph{Semantics}~\par\noindent}
    139 \newcommand{\constraints}{\paragraph{Constraints}~\par\noindent}
    140 \newcommand{\predefined}{\paragraph{Predefined Identifiers}~\par\noindent}
    141 
    142 % BNF macros
    143 \def\syntax{\paragraph{Syntax}\trivlist\parindent=.5in\item[\hskip.5in]}
    144 \let\endsyntax=\endtrivlist
    145 \newcommand{\lhs}[1]{\par{\emph{#1:}}\index{#1@{\emph{#1}}|italic}}
    146 \newcommand{\rhs}{\hfil\break\hbox{\hskip1in}}
    147 \newcommand{\oldlhs}[1]{\emph{#1: \ldots}\index{#1@{\emph{#1}}|italic}}
    148 \newcommand{\nonterm}[1]{\emph{#1\/}\index{#1@{\emph{#1}}|italic}}
    149 \newcommand{\opt}{$_{opt}$\ }
    150 
    151 % adjust varioref package with default "section" and "page" titles, and optional title with faraway page numbers
    152 % \VRef{label} => Section 2.7, \VPageref{label} => page 17
    153 % \VRef[Figure]{label} => Figure 3.4, \VPageref{label} => page 17
    154 \renewcommand{\reftextfaceafter}{\unskip}
    155 \renewcommand{\reftextfacebefore}{\unskip}
    156 \renewcommand{\reftextafter}{\unskip}
    157 \renewcommand{\reftextbefore}{\unskip}
    158 \renewcommand{\reftextfaraway}[1]{\unskip, p.~\pageref{#1}}
    159 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
    160 \newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
    161 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    162 
    163 % Go programming language
    164 \lstdefinelanguage{Golang}%
    165   {morekeywords=[1]{package,import,func,type,struct,return,defer,panic, recover,select,var,const,iota,},%
    166    morekeywords=[2]{string,uint,uint8,uint16,uint32,uint64,int,int8,int16, int32,int64,
    167                 bool,float32,float64,complex64,complex128,byte,rune,uintptr, error,interface},%
    168    morekeywords=[3]{map,slice,make,new,nil,len,cap,copy,close,true,false, delete,append,real,imag,complex,chan,},%
    169    morekeywords=[4]{for,break,continue,range,goto,switch,case,fallthrough,if, else,default,},%
    170    morekeywords=[5]{Println,Printf,Error,},%
    171    sensitive=true,%
    172    morecomment=[l]{//},%
    173    morecomment=[s]{/*}{*/},%
    174    morestring=[b]',%
    175    morestring=[b]",%
    176    morestring=[s]{`}{`},%
    177 }
    178 
    179 % CFA based on ANSI C
    180 \lstdefinelanguage{CFA}[ANSI]{C}%
    181 {morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto,
    182     _Bool,catch,catchResume,choose,_Complex,__complex,__complex__,__const,__const__,disable,dtype,enable,__extension__,
    183         fallthru,finally,forall,ftype,_Generic,_Imaginary,inline,__label__,lvalue,_Noreturn,otype,restrict,_Static_assert,
    184         _Thread_local,throw,throwResume,trait,try,typeof,__typeof,__typeof__,},
    185   moredelim=**[is][\color{red}]{`}{`},
    186 }%
    187 
    188 \lstset{
    189 language=CFA,
    190 columns=flexible,
    191 basicstyle=\sf\relsize{-1},
    192 tabsize=4,
    193 xleftmargin=\parindent,
    194 escapechar=@,
    195 mathescape=true,
    196 keepspaces=true,
    197 showstringspaces=false,
    198 showlines=true,
    199 aboveskip=6pt,
    200 belowskip=4pt,
    201 literate={\\`}{\raisebox{0.3ex}{\ttfamily\upshape \hspace*{-2pt}`}}1, % escape \`, otherwise used to highlight in red
    202 %extendedchars=true,
    203 }%
    204 
    205 \makeatletter
    206 % replace/adjust listings characters that look bad in sanserif
    207 \lst@CCPutMacro
    208 \lst@ProcessOther{"22}{\lst@ttfamily{"}{\raisebox{0.3ex}{\ttfamily\upshape "}}} % replace double quote
    209 \lst@ProcessOther{"27}{\lst@ttfamily{'}{\raisebox{0.3ex}{\ttfamily\upshape '\hspace*{-2pt}}}} % replace single quote
    210 \lst@ProcessOther{"2D}{\lst@ttfamily{-}{\ttfamily\upshape -}} % replace minus
    211 \lst@ProcessOther{"3C}{\lst@ttfamily{<}{\texttt{<}}} % replace less than
    212 \lst@ProcessOther{"3E}{\lst@ttfamily{<}{\texttt{>}}} % replace greater than
    213 \lst@ProcessOther{"5E}{\raisebox{0.4ex}{$\scriptstyle\land\,$}} % replace circumflex
    214 \lst@ProcessOther{"5F}{\lst@ttfamily{\char95}{{\makebox[1.2ex][c]{\rule{1ex}{0.1ex}}}}} % replace underscore
    215 \lst@ProcessOther{"60}{\lst@ttfamily{`}{\raisebox{0.3ex}{\ttfamily\upshape \hspace*{-2pt}`}}} % replace backquote
    216 \lst@ProcessOther{"7E}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}} % replace tilde
    217 %\lst@ProcessOther{"7E}{\raisebox{-.4ex}[1ex][0pt]{\textasciitilde}} % lower tilde
    218 \@empty\z@\@empty
    219 \makeatother
     50\input{common}
    22051
    22152\setcounter{secnumdepth}{3}     % number subsubsections
     
    45734404
    45744405
     4406\section{Rational Numbers}
     4407\label{s:RationalNumbers}
     4408
     4409Rational numbers are numbers written as a ratio, i.e., as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers.
     4410When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible.
     4411
     4412\begin{lstlisting}
     4413// implementation
     4414struct Rational {
     4415        long int numerator, denominator;                                        // invariant: denominator > 0
     4416}; // Rational
     4417
     4418// constants
     4419extern struct Rational 0;
     4420extern struct Rational 1;
     4421
     4422// constructors
     4423Rational rational();
     4424Rational rational( long int n );
     4425Rational rational( long int n, long int d );
     4426
     4427// getter/setter for numerator/denominator
     4428long int numerator( Rational r );
     4429long int numerator( Rational r, long int n );
     4430long int denominator( Rational r );
     4431long int denominator( Rational r, long int d );
     4432
     4433// comparison
     4434int ?==?( Rational l, Rational r );
     4435int ?!=?( Rational l, Rational r );
     4436int ?<?( Rational l, Rational r );
     4437int ?<=?( Rational l, Rational r );
     4438int ?>?( Rational l, Rational r );
     4439int ?>=?( Rational l, Rational r );
     4440
     4441// arithmetic
     4442Rational -?( Rational r );
     4443Rational ?+?( Rational l, Rational r );
     4444Rational ?-?( Rational l, Rational r );
     4445Rational ?*?( Rational l, Rational r );
     4446Rational ?/?( Rational l, Rational r );
     4447
     4448// conversion
     4449double widen( Rational r );
     4450Rational narrow( double f, long int md );
     4451
     4452// I/O
     4453forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, Rational * );
     4454forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, Rational );
     4455\end{lstlisting}
     4456
     4457
    45754458\bibliographystyle{plain}
    4576 \bibliography{/usr/local/bibliographies/pl.bib}
     4459\bibliography{cfa}
    45774460
    45784461
Note: See TracChangeset for help on using the changeset viewer.