Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/user/user.tex

    re55ca05 r53ba273  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Fri Apr  8 11:40:53 2016
    14 %% Update Count     : 42
     13%% Last Modified On : Wed Apr  6 17:37:39 2016
     14%% Update Count     : 34
    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)
    4549\newcommand{\CS}{C\raisebox{-0.9ex}{\large$^\sharp$}\xspace}
    4650
     
    4852
    4953% Bespoke macros used in the document.
    50 \input{common}
     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{
     189language=CFA,
     190columns=flexible,
     191basicstyle=\sf\relsize{-1},
     192tabsize=4,
     193xleftmargin=\parindent,
     194escapechar=@,
     195mathescape=true,
     196keepspaces=true,
     197showstringspaces=false,
     198showlines=true,
     199aboveskip=6pt,
     200belowskip=4pt,
     201literate={\\`}{\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
    51220
    52221\setcounter{secnumdepth}{3}     % number subsubsections
     
    44044573
    44054574
    4406 \section{Rational Numbers}
    4407 \label{s:RationalNumbers}
    4408 
    4409 Rational 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.
    4410 When 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
    4414 struct Rational {
    4415         long int numerator, denominator;                                        // invariant: denominator > 0
    4416 }; // Rational
    4417 
    4418 // constants
    4419 extern struct Rational 0;
    4420 extern struct Rational 1;
    4421 
    4422 // constructors
    4423 Rational rational();
    4424 Rational rational( long int n );
    4425 Rational rational( long int n, long int d );
    4426 
    4427 // getter/setter for numerator/denominator
    4428 long int numerator( Rational r );
    4429 long int numerator( Rational r, long int n );
    4430 long int denominator( Rational r );
    4431 long int denominator( Rational r, long int d );
    4432 
    4433 // comparison
    4434 int ?==?( Rational l, Rational r );
    4435 int ?!=?( Rational l, Rational r );
    4436 int ?<?( Rational l, Rational r );
    4437 int ?<=?( Rational l, Rational r );
    4438 int ?>?( Rational l, Rational r );
    4439 int ?>=?( Rational l, Rational r );
    4440 
    4441 // arithmetic
    4442 Rational -?( Rational r );
    4443 Rational ?+?( Rational l, Rational r );
    4444 Rational ?-?( Rational l, Rational r );
    4445 Rational ?*?( Rational l, Rational r );
    4446 Rational ?/?( Rational l, Rational r );
    4447 
    4448 // conversion
    4449 double widen( Rational r );
    4450 Rational narrow( double f, long int md );
    4451 
    4452 // I/O
    4453 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, Rational * );
    4454 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, Rational );
    4455 \end{lstlisting}
    4456 
    4457 
    44584575\bibliographystyle{plain}
    4459 \bibliography{cfa}
     4576\bibliography{/usr/local/bibliographies/pl.bib}
    44604577
    44614578
Note: See TracChangeset for help on using the changeset viewer.