Changeset 946a6e4


Ignore:
Timestamp:
Oct 16, 2023, 8:09:41 AM (7 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
a97b9ed
Parents:
0d49efb
Message:

updates to the uC++toCFA cheat sheet

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/uC++toCFA/uC++toCFA.tex

    r0d49efb r946a6e4  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sun Sep 17 09:10:12 2023
    14 %% Update Count     : 5883
     13%% Last Modified On : Sun Oct 15 23:09:58 2023
     14%% Update Count     : 5926
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    119119
    120120\title{\vspace*{-0.5in}
    121 \CC/\uC to \CFA Cheat Sheet}
     121\uC to \CFA Cheat Sheet}
    122122%\author{Peter A. Buhr}
    123123\date{}
     
    195195\end{cfa}
    196196\noindent
    197 In subsequent code examples, the left example is \CC/\uC and the right example is \CFA.
     197In subsequent code examples, the left example is \uC and the right example is \CFA.
     198
     199
     200\section{Stream I/O}
     201
     202\CFA output streams automatically separate values and insert a newline at the end of the print.
     203
     204\begin{cquote}
     205\begin{tabular}{l|l}
     206\begin{uC++}
     207#include <@iostream@>
     208using namespace std;
     209int i;   double d;   char c;
     210cin >> i >> d >> c;
     211cout << i << ' ' << d << ' ' << c | endl;
     212\end{uC++}
     213&
     214\begin{cfa}
     215#include <@fstream.hfa@>
     216
     217int i;   double d;   char c;
     218sin | i | d | c;
     219sout | i | d | c
     220\end{cfa}
     221\end{tabular}
     222\end{cquote}
    198223
    199224
     
    203228\begin{tabular}{l|l}
    204229\begin{uC++}
    205 for ( ;; ) { ... } / while ( true ) { ... }
    206 for ( int i = 0; i < 10; i += 1 ) { ... }
    207 for ( int i = 5; i < 15; i += 2 ) { ... }
     230for ( @;;@ ) { ... }  /  while ( @true@ ) { ... }
     231for ( int i = 0; i < @10@; i += 1 ) { ... }
     232for ( int i = @5@; i < @15@; i += @2@ ) { ... }
     233for ( int i = -1; i <@=@ 10; i += 3 ) { ... }
     234for ( int i = 10; i > 0; i @-@= 1 ) { ... }
     235\end{uC++}
     236&
     237\begin{cfa}
     238for () { ... }  /  while () { ... }
     239for ( @10@ ) { ... }  /  for ( i; @10@ ) { ... }
     240for ( i; @5@ ~ @15@ ~ @2@ ) { ... }
     241for ( i; -1 ~@=@ 10 ~ 3 ) { ... }
     242for ( i; 0 @-@~ 10 ) { ... }
     243\end{cfa}
     244\\
     245\hline
     246\begin{uC++}
    208247int i = 0
    209248for ( i = 0; i < 10; i += 1 ) { ... }
    210 if ( i == 10 ) { ... }
    211 \end{uC++}
    212 &
    213 \begin{cfa}
    214 for () { ... } / while () { ... }
    215 for ( 10 ) { ... } / for ( i; 10 ) { ... }
    216 for ( i; 5~15~2 ) { ... }
     249@if ( i == 10 )@ { ... }
     250\end{uC++}
     251&
     252\begin{cfa}
    217253
    218254for ( i; 10 ) { ... }
    219 else { ... } // i == 10
    220 \end{cfa}
    221 \end{tabular}
    222 \end{cquote}
    223 
    224 
    225 \section{Exceptions}
     255@else@ { ... } // i == 10
     256\end{cfa}
     257\\
     258\hline
     259\begin{uC++}
     260L1: for ( ;; ) {
     261        L2: for ( ;; ) {
     262                ... @break L1@; ... @break L2@; ...
     263        }
     264}
     265\end{uC++}
     266&
     267\begin{cfa}
     268L1: for () {
     269        L2: for () {
     270                ... @break L1@; ... @break L2@; ...
     271        }
     272}
     273\end{cfa}
     274\end{tabular}
     275\end{cquote}
     276
     277
     278\section{Exception}
    226279
    227280Currently, \CFA uses macros @ExceptionDecl@ and @ExceptionInst@ to declare and instantiate an exception.
     
    230283\begin{uC++}
    231284
    232 struct E {              // local or global scope
     285@_Exception@ E {        // local or global scope
    233286        ... // exception fields
    234287};
    235288try {
    236289        ...
    237         if ( ... ) _Resume E( /* initialization */ );
    238         if ( ... ) _Throw E( /* initialization */ );
    239         ...
    240 } _CatchResume( E & ) { // should be reference
     290        if ( ... ) @_Resume@ E( /* initialization */ );
     291        if ( ... ) @_Throw@ E( /* initialization */ );
     292                ...
     293} @_CatchResume@( E & ) { // should be reference
    241294        ...
    242295} catch( E & ) {
     
    252305try {
    253306        ...
    254         if ( ... ) throwResume @ExceptionInst@( E, /* intialization */ );
    255         if ( ... ) throw @ExceptionInst@( E, /* intialization */ );
     307        if ( ... ) @throwResume@ @ExceptionInst@( E, /* intialization */ );
     308        if ( ... ) @throw@ @ExceptionInst@( E, /* intialization */ );
    256309        ...
    257 } catchResume( E * ) { // must be pointer
     310} @catchResume@( E * ) { // must be pointer
    258311        ...
    259312} catch( E * ) {
     
    265318
    266319
    267 \section{Stream I/O}
    268 
    269 \CFA output streams automatically separate values and insert a newline at the end of the print.
     320\section{Non-local Exception}
     321
     322\begin{cquote}
     323\begin{tabular}{l|ll}
     324\begin{uC++}
     325
     326
     327void main() {
     328        try {
     329                _Enable {
     330                        ... suspend(); ...
     331                }
     332        } @_CatchResume@( E & ) { // reference
     333                ...
     334        } catch( E & ) {
     335                ...
     336        }
     337}
     338\end{uC++}
     339&
     340\begin{cfa}
     341#define resumePoll( coroutine ) resume( coroutine ); checked_poll()
     342#define suspendPoll suspend; checked_poll()
     343void main() {
     344        try {
     345                enable_ehm();
     346                ... suspendPoll ...
     347                disable_ehm();
     348        } @catchResume@( E * ) { // pointer
     349                ...
     350        } catch( E & ) {
     351                ...
     352        }
     353}
     354\end{cfa}
     355\end{tabular}
     356\end{cquote}
     357
     358
     359\section{Constructor / Destructor}
    270360
    271361\begin{cquote}
    272362\begin{tabular}{l|l}
    273363\begin{uC++}
    274 #include <@iostream@>
    275 using namespace std;
    276 int i;   double d;   char c;
    277 cin >> i >> d >> c;
    278 cout << i << ' ' << d << ' ' << c | endl;
    279 \end{uC++}
    280 &
    281 \begin{cfa}
    282 #include <@fstream.hfa@>
    283 
    284 int i;   double d;   char c;
    285 sin | i | d | c;
    286 sout | i | d | c
     364struct S {
     365        ... // fields
     366        @S@(...) { ... }
     367        @~S@(...) { ... }
     368};
     369\end{uC++}
     370&
     371\begin{cfa}
     372struct S {
     373        ... // fields
     374};
     375@?{}@( @S & s,@ ...) { ... }
     376@^?{}@( @S & s@ ) { ... }
    287377\end{cfa}
    288378\end{tabular}
     
    332422
    333423
    334 \section{Constructor / Destructor}
    335 
    336 \begin{cquote}
    337 \begin{tabular}{l|l}
    338 \begin{uC++}
    339 struct S {
    340         ... // fields
    341         @S@(...) { ... }
    342         @~S@(...) { ... }
    343 };
    344 \end{uC++}
    345 &
    346 \begin{cfa}
    347 struct S {
    348         ... // fields
    349 };
    350 @?{}@( @S & s,@ ...) { ... }
    351 @^?{}@( @S & s@ ) { ... }
    352 \end{cfa}
    353 \end{tabular}
    354 \end{cquote}
    355 
    356 
    357424\section{\texorpdfstring{Structures (object-oriented \protect\vs routine style)}{Structures (object-oriented vs. routine style)}}
    358425
Note: See TracChangeset for help on using the changeset viewer.