From 648fa2ee61696550732c5786cf332f79fc007299 Mon Sep 17 00:00:00 2001
From: Erwan Jahier <jahier@imag.fr>
Date: Thu, 21 Feb 2008 15:28:57 +0100
Subject: [PATCH] Write a more generic src/test/Makefile

Add Some lustre files that are automatically tested thanks to the
generic Makefile (from the Youssef compiler).

Test files are organized as follows :

 - files in directories that are under the "should_fail" directory
  do triggers errors, but it is intented

	should_fail/syntax
	should_fail/type
	should_fail/semantics

 - and files that should not trigger any error:

	should_work/
---
 src/TODO                                      |   53 +-
 src/lexer.mll                                 |   24 +-
 src/parser.mly                                |    3 +
 src/test/Makefile                             |   88 +-
 src/test/diff                                 | 2114 ----
 src/test/should_fail/clock/clock.lus          |   24 +
 .../should_fail/semantics/activation1.lus     |   27 +
 .../should_fail/semantics/activation2.lus     |   24 +
 src/test/should_fail/semantics/bad_call01.lus |    9 +
 src/test/should_fail/semantics/bad_call03.lus |   16 +
 src/test/should_fail/semantics/bug.lus        |   95 +
 src/test/should_fail/semantics/const.lus      |   46 +
 src/test/should_fail/semantics/cpt_dc.lus     |   24 +
 src/test/should_fail/semantics/def.lus        |   18 +
 src/test/should_fail/semantics/import2.lus    |    6 +
 src/test/should_fail/semantics/m.lus          |   29 +
 .../should_fail/semantics/not_a_constant.lus  |   13 +
 src/test/should_fail/semantics/piege.lus      |   17 +
 src/test/{ => should_fail/semantics}/x.lus    |    1 +
 src/test/should_fail/type/Gyro.lus            |  374 +
 src/test/should_fail/type/const2.lus          |   28 +
 src/test/should_work/NONREG/CURRENT.lus       |    5 +
 src/test/should_work/NONREG/Int.lus           |   49 +
 src/test/should_work/NONREG/PCOND.lus         |   11 +
 src/test/should_work/NONREG/PCOND1.lus        |    7 +
 src/test/should_work/NONREG/SOURIS.lus        |  143 +
 src/test/should_work/NONREG/Watch.lus         |  554 ++
 src/test/should_work/NONREG/X.lus             |    8 +
 src/test/should_work/NONREG/X1.lus            |    6 +
 src/test/should_work/NONREG/X2.lus            |    6 +
 src/test/should_work/NONREG/X3.lus            |   16 +
 src/test/should_work/NONREG/X6.lus            |   17 +
 src/test/should_work/NONREG/_N_uu.lus         |   63 +
 src/test/should_work/NONREG/activation_ec.lus |   21 +
 src/test/should_work/NONREG/after.lus         |    4 +
 src/test/should_work/NONREG/alarme.lus        |   61 +
 src/test/should_work/NONREG/arbitre.lus       |   54 +
 src/test/should_work/NONREG/argos.lus         |   11 +
 src/test/should_work/NONREG/assertion.lus     |   10 +
 src/test/should_work/NONREG/aux.lus           |    5 +
 src/test/should_work/NONREG/aux1.lus          |    5 +
 src/test/should_work/NONREG/bascule.lus       |    6 +
 src/test/should_work/NONREG/call.lus          |   14 +
 src/test/should_work/NONREG/ck2.lus           |    6 +
 src/test/should_work/NONREG/ck3.lus           |    5 +
 src/test/should_work/NONREG/ck4.lus           |    5 +
 src/test/should_work/NONREG/ck5.lus           |   10 +
 src/test/should_work/NONREG/ck6.lus           |   22 +
 src/test/should_work/NONREG/ck7.lus           |    6 +
 src/test/should_work/NONREG/clock.lus         |   24 +
 src/test/should_work/NONREG/cminus.lus        |   21 +
 src/test/should_work/NONREG/compteur.lus      |    4 +
 src/test/should_work/NONREG/cpt.lus           |    5 +
 src/test/should_work/NONREG/cst.lus           |    9 +
 src/test/should_work/NONREG/deconne.lus       |   30 +
 src/test/should_work/NONREG/dep.lus           |    9 +
 src/test/should_work/NONREG/dependeur.lus     |   24 +
 .../should_work/NONREG/dependeur_struct.lus   |   27 +
 src/test/should_work/NONREG/drapfab.lus       |   42 +
 src/test/should_work/NONREG/enum.lus          |   14 +
 src/test/should_work/NONREG/eq1.lus           |   11 +
 src/test/should_work/NONREG/ex.lus            |   10 +
 src/test/should_work/NONREG/exclusion.lus     |   17 +
 src/test/should_work/NONREG/fby.lus           |    4 +
 src/test/should_work/NONREG/flo.lus           |   17 +
 src/test/should_work/NONREG/hanane.lus        |   29 +
 src/test/should_work/NONREG/import1.lus       |    5 +
 src/test/should_work/NONREG/initial.lus       |    7 +
 .../NONREG/long_et_stupide_nom_de_noeud.lus   |   15 +
 src/test/should_work/NONREG/minmax1.lus       |    6 +
 src/test/should_work/NONREG/minmax2.lus       |   16 +
 src/test/should_work/NONREG/minmax3.lus       |   22 +
 src/test/should_work/NONREG/minmax4.lus       |   27 +
 src/test/should_work/NONREG/minmax4_bis.lus   |   29 +
 src/test/should_work/NONREG/minmax5.lus       |   24 +
 .../should_work/NONREG/minmax5_random.lus     |   29 +
 src/test/should_work/NONREG/minmax6.lus       |   36 +
 src/test/should_work/NONREG/mm.lus            |    7 +
 src/test/should_work/NONREG/mm1.lus           |    7 +
 src/test/should_work/NONREG/mm22.lus          |    8 +
 src/test/should_work/NONREG/mm3.lus           |    9 +
 src/test/should_work/NONREG/mouse.lus         |   16 +
 src/test/should_work/NONREG/mouse1.lus        |   14 +
 src/test/should_work/NONREG/mouse2.lus        |   40 +
 src/test/should_work/NONREG/mouse3.lus        |   22 +
 src/test/should_work/NONREG/multiclock.lus    |   20 +
 src/test/should_work/NONREG/nc1.lus           |   16 +
 src/test/should_work/NONREG/nc10.lus          |   37 +
 src/test/should_work/NONREG/nc2.lus           |   16 +
 src/test/should_work/NONREG/nc3.lus           |   19 +
 src/test/should_work/NONREG/nc4.lus           |   27 +
 src/test/should_work/NONREG/nc5.lus           |   33 +
 src/test/should_work/NONREG/nc6.lus           |   33 +
 src/test/should_work/NONREG/nc7.lus           |   33 +
 src/test/should_work/NONREG/nc8.lus           |   34 +
 src/test/should_work/NONREG/nc9.lus           |   39 +
 src/test/should_work/NONREG/node_caller1.lus  |   30 +
 .../should_work/NONREG/o2l_feux_compl.lus     | 1487 +++
 src/test/should_work/NONREG/patrick.lus       |    6 +
 src/test/should_work/NONREG/poussoir.lus      |   18 +
 src/test/should_work/NONREG/rs.lus            |    6 +
 src/test/should_work/NONREG/s.lus             |    5 +
 src/test/should_work/NONREG/simple.lus        |   23 +
 src/test/should_work/NONREG/stopwatch.lus     |   26 +
 src/test/should_work/NONREG/test.exp          |    1 +
 src/test/should_work/NONREG/test.res          |    1 +
 src/test/should_work/NONREG/testCA.lus        |   23 +
 src/test/should_work/NONREG/trivial.lus       |    8 +
 src/test/should_work/NONREG/trivial2.lus      |    8 +
 src/test/should_work/NONREG/uu.lus            |   27 +
 src/test/should_work/NONREG/v1.lus            |    4 +
 .../{ => should_work/Pascal}/consensus.lus    |    0
 src/test/{ => should_work/Pascal}/fby.lus     |    0
 .../Pascal}/func_with_body.lus                |    0
 .../Pascal}/heater_control.lus                |    0
 src/test/{ => should_work/Pascal}/left.lus    |    0
 .../{ => should_work/Pascal}/newpacks.lus     |    0
 .../{ => should_work/Pascal}/onlyroll.lus     |    0
 src/test/{ => should_work/Pascal}/p.lus       |    0
 src/test/{ => should_work/Pascal}/packs.lus   |    0
 src/test/{ => should_work/Pascal}/pfs.lus     |    0
 src/test/{ => should_work/Pascal}/struct0.lus |    0
 src/test/{ => should_work/Pascal}/t.lus       |    6 +-
 src/test/{ => should_work/Pascal}/t0.lus      |    1 +
 src/test/{ => should_work/Pascal}/t1.lus      |    0
 src/test/{ => should_work/Pascal}/t2.lus      |    0
 src/test/{ => should_work/Pascal}/test.lus    |    0
 src/test/{ => should_work/Pascal}/trivial.lus |    0
 src/test/should_work/call/bad_call02.lus      |    7 +
 src/test/should_work/call/call01.lus          |   11 +
 src/test/should_work/call/call02.lus          |    9 +
 src/test/should_work/call/call03.lus          |   10 +
 src/test/should_work/call/call04.lus          |    9 +
 src/test/should_work/call/call05.lus          |    6 +
 src/test/should_work/call/call06.lus          |    7 +
 src/test/should_work/call/call07.lus          |    5 +
 src/test/should_work/demo/Gyroscope2.lus      |  365 +
 src/test/should_work/demo/alias.lus           |   50 +
 src/test/should_work/demo/bred.lus            |    4 +
 src/test/should_work/demo/bred_lv4.lus        |   26 +
 src/test/should_work/demo/clock.lus           |   27 +
 src/test/should_work/demo/clock1_2ms.lus      |   20 +
 src/test/should_work/demo/decl.lus            |   39 +
 src/test/should_work/demo/declaration.lus     |   47 +
 src/test/should_work/demo/def.lus             |   67 +
 src/test/should_work/demo/filliter.lus        |   28 +
 src/test/should_work/demo/filter.lus          |   17 +
 src/test/should_work/demo/lustre_test1_ok.lus |   69 +
 src/test/should_work/demo/map_red_iter.lus    |   64 +
 src/test/should_work/demo/mapdeRed.lus        |   19 +
 src/test/should_work/demo/mapiter.lus         |   10 +
 src/test/should_work/demo/mapiter_lv4.lus     |   45 +
 src/test/should_work/demo/mappredef.lus       |   12 +
 src/test/should_work/demo/plus.lus            |    9 +
 src/test/should_work/demo/pre_x.lus           |    6 +
 src/test/should_work/demo/rediter.lus         |    9 +
 src/test/should_work/demo/redoptest.lus       |    9 +
 .../should_work/demo/sample_time_change.lus   |   63 +
 src/test/should_work/demo/test.exp            |    5 +
 src/test/should_work/demo/tranche.lus         |   32 +
 src/test/should_work/fab_test/bob.lus         |    5 +
 src/test/should_work/fab_test/def.lus         |    5 +
 src/test/should_work/fab_test/ex.lus          |   16 +
 src/test/should_work/fab_test/iter.lus        |   37 +
 src/test/should_work/fab_test/iterate.lus     |   51 +
 src/test/should_work/fab_test/iterate.trace   | 1465 +++
 .../should_work/fab_test/iterate_var.trace    | 8696 +++++++++++++++++
 src/test/should_work/fab_test/lecteur.lus     |   32 +
 src/test/should_work/fab_test/lucky.lus       |   45 +
 src/test/should_work/fab_test/morel.lus       |   30 +
 src/test/should_work/fab_test/morel2.lus      |   36 +
 src/test/should_work/fab_test/morel3.lus      |   30 +
 src/test/should_work/fab_test/morel4.lus      |   38 +
 src/test/should_work/fab_test/morel5.lus      |   36 +
 src/test/should_work/fab_test/noAlarm.lus     |    6 +
 src/test/should_work/fab_test/notTwo.lus      |    6 +
 src/test/should_work/fab_test/onlyroll.lus    |  587 ++
 src/test/should_work/fab_test/onlyroll2.lus   |  587 ++
 src/test/should_work/fab_test/test.exp        |    1 +
 src/test/should_work/fab_test/test.lus        |   19 +
 src/test/should_work/fab_test/test.res        |    1 +
 src/test/should_work/fab_test/titi.lus        |    5 +
 src/test/should_work/fab_test/toolate.lus     |   90 +
 src/test/should_work/fab_test/toto.lus        |    8 +
 .../should_work/lionel/FillFollowedByRed.lus  |   38 +
 src/test/should_work/lionel/Gyroscope.lus     |  208 +
 .../lionel/ProduitBool/produitBool.lus        |  110 +
 .../lionel/ProduitBool/shiftFill_ludic.lus    |   58 +
 .../lionel/ProduitBool/shift_ludic.lus        |   70 +
 src/test/should_work/lionel/arrays.lus        |   86 +
 src/test/should_work/lionel/calculs_max.lus   |   80 +
 src/test/should_work/lionel/deSimone.lus      |  157 +
 src/test/should_work/lionel/iterFibo.lus      |   15 +
 src/test/should_work/lionel/mapiter.lus       |   72 +
 src/test/should_work/lionel/matrice.lus       |   20 +
 src/test/should_work/lionel/matrice2.lus      |    9 +
 src/test/should_work/lionel/minus.lus         |   17 +
 src/test/should_work/lionel/moyenne.lus       |   39 +
 src/test/should_work/lionel/normal.lus        |  528 +
 src/test/should_work/lionel/pipeline.lus      |   34 +
 src/test/should_work/lionel/predefOp.lus      |  118 +
 src/test/should_work/lionel/redIf.lus         |   11 +
 src/test/should_work/lionel/simpleRed.lus     |    7 +
 src/test/should_work/lionel/test.exp          |   11 +
 src/test/should_work/lionel/testSilus.lus     |  446 +
 src/test/should_work/lionel/triSel.lus        |  272 +
 src/test/should_work/packEnvTest/Condact.lus  |   41 +
 .../contractForElementSelectionInArray.lus    |   22 +
 .../main.lus                                  |   28 +
 .../noeudsIndependants.lus                    |   10 +
 .../packageTableau.lus                        |  375 +
 .../tri.lus                                   |  225 +
 .../should_work/packEnvTest/modelInst.lus     |   42 +
 src/test/should_work/packEnvTest/packages.lus |   78 +
 .../should_work/packEnvTest/packages2.lus     |   77 +
 src/test/should_work/to_sort_out/asservi.lus  |  102 +
 src/test/should_work/to_sort_out/const2.lus   |   16 +
 src/test/should_work/to_sort_out/record.lus   |    8 +
 src/test/should_work/to_sort_out/test.res     |   18 +
 src/test/test.res.exp                         | 5832 ++++++++++-
 220 files changed, 26346 insertions(+), 2658 deletions(-)
 delete mode 100644 src/test/diff
 create mode 100644 src/test/should_fail/clock/clock.lus
 create mode 100644 src/test/should_fail/semantics/activation1.lus
 create mode 100644 src/test/should_fail/semantics/activation2.lus
 create mode 100644 src/test/should_fail/semantics/bad_call01.lus
 create mode 100644 src/test/should_fail/semantics/bad_call03.lus
 create mode 100644 src/test/should_fail/semantics/bug.lus
 create mode 100644 src/test/should_fail/semantics/const.lus
 create mode 100644 src/test/should_fail/semantics/cpt_dc.lus
 create mode 100644 src/test/should_fail/semantics/def.lus
 create mode 100644 src/test/should_fail/semantics/import2.lus
 create mode 100644 src/test/should_fail/semantics/m.lus
 create mode 100644 src/test/should_fail/semantics/not_a_constant.lus
 create mode 100644 src/test/should_fail/semantics/piege.lus
 rename src/test/{ => should_fail/semantics}/x.lus (79%)
 create mode 100644 src/test/should_fail/type/Gyro.lus
 create mode 100644 src/test/should_fail/type/const2.lus
 create mode 100644 src/test/should_work/NONREG/CURRENT.lus
 create mode 100644 src/test/should_work/NONREG/Int.lus
 create mode 100644 src/test/should_work/NONREG/PCOND.lus
 create mode 100644 src/test/should_work/NONREG/PCOND1.lus
 create mode 100644 src/test/should_work/NONREG/SOURIS.lus
 create mode 100644 src/test/should_work/NONREG/Watch.lus
 create mode 100644 src/test/should_work/NONREG/X.lus
 create mode 100644 src/test/should_work/NONREG/X1.lus
 create mode 100644 src/test/should_work/NONREG/X2.lus
 create mode 100644 src/test/should_work/NONREG/X3.lus
 create mode 100644 src/test/should_work/NONREG/X6.lus
 create mode 100644 src/test/should_work/NONREG/_N_uu.lus
 create mode 100644 src/test/should_work/NONREG/activation_ec.lus
 create mode 100644 src/test/should_work/NONREG/after.lus
 create mode 100644 src/test/should_work/NONREG/alarme.lus
 create mode 100644 src/test/should_work/NONREG/arbitre.lus
 create mode 100644 src/test/should_work/NONREG/argos.lus
 create mode 100644 src/test/should_work/NONREG/assertion.lus
 create mode 100644 src/test/should_work/NONREG/aux.lus
 create mode 100644 src/test/should_work/NONREG/aux1.lus
 create mode 100644 src/test/should_work/NONREG/bascule.lus
 create mode 100644 src/test/should_work/NONREG/call.lus
 create mode 100644 src/test/should_work/NONREG/ck2.lus
 create mode 100644 src/test/should_work/NONREG/ck3.lus
 create mode 100644 src/test/should_work/NONREG/ck4.lus
 create mode 100644 src/test/should_work/NONREG/ck5.lus
 create mode 100644 src/test/should_work/NONREG/ck6.lus
 create mode 100644 src/test/should_work/NONREG/ck7.lus
 create mode 100644 src/test/should_work/NONREG/clock.lus
 create mode 100644 src/test/should_work/NONREG/cminus.lus
 create mode 100644 src/test/should_work/NONREG/compteur.lus
 create mode 100644 src/test/should_work/NONREG/cpt.lus
 create mode 100644 src/test/should_work/NONREG/cst.lus
 create mode 100644 src/test/should_work/NONREG/deconne.lus
 create mode 100644 src/test/should_work/NONREG/dep.lus
 create mode 100644 src/test/should_work/NONREG/dependeur.lus
 create mode 100644 src/test/should_work/NONREG/dependeur_struct.lus
 create mode 100644 src/test/should_work/NONREG/drapfab.lus
 create mode 100644 src/test/should_work/NONREG/enum.lus
 create mode 100644 src/test/should_work/NONREG/eq1.lus
 create mode 100644 src/test/should_work/NONREG/ex.lus
 create mode 100644 src/test/should_work/NONREG/exclusion.lus
 create mode 100644 src/test/should_work/NONREG/fby.lus
 create mode 100644 src/test/should_work/NONREG/flo.lus
 create mode 100644 src/test/should_work/NONREG/hanane.lus
 create mode 100644 src/test/should_work/NONREG/import1.lus
 create mode 100644 src/test/should_work/NONREG/initial.lus
 create mode 100644 src/test/should_work/NONREG/long_et_stupide_nom_de_noeud.lus
 create mode 100644 src/test/should_work/NONREG/minmax1.lus
 create mode 100644 src/test/should_work/NONREG/minmax2.lus
 create mode 100644 src/test/should_work/NONREG/minmax3.lus
 create mode 100644 src/test/should_work/NONREG/minmax4.lus
 create mode 100644 src/test/should_work/NONREG/minmax4_bis.lus
 create mode 100644 src/test/should_work/NONREG/minmax5.lus
 create mode 100644 src/test/should_work/NONREG/minmax5_random.lus
 create mode 100644 src/test/should_work/NONREG/minmax6.lus
 create mode 100644 src/test/should_work/NONREG/mm.lus
 create mode 100644 src/test/should_work/NONREG/mm1.lus
 create mode 100644 src/test/should_work/NONREG/mm22.lus
 create mode 100644 src/test/should_work/NONREG/mm3.lus
 create mode 100644 src/test/should_work/NONREG/mouse.lus
 create mode 100644 src/test/should_work/NONREG/mouse1.lus
 create mode 100644 src/test/should_work/NONREG/mouse2.lus
 create mode 100644 src/test/should_work/NONREG/mouse3.lus
 create mode 100644 src/test/should_work/NONREG/multiclock.lus
 create mode 100644 src/test/should_work/NONREG/nc1.lus
 create mode 100644 src/test/should_work/NONREG/nc10.lus
 create mode 100644 src/test/should_work/NONREG/nc2.lus
 create mode 100644 src/test/should_work/NONREG/nc3.lus
 create mode 100644 src/test/should_work/NONREG/nc4.lus
 create mode 100644 src/test/should_work/NONREG/nc5.lus
 create mode 100644 src/test/should_work/NONREG/nc6.lus
 create mode 100644 src/test/should_work/NONREG/nc7.lus
 create mode 100644 src/test/should_work/NONREG/nc8.lus
 create mode 100644 src/test/should_work/NONREG/nc9.lus
 create mode 100644 src/test/should_work/NONREG/node_caller1.lus
 create mode 100644 src/test/should_work/NONREG/o2l_feux_compl.lus
 create mode 100644 src/test/should_work/NONREG/patrick.lus
 create mode 100644 src/test/should_work/NONREG/poussoir.lus
 create mode 100644 src/test/should_work/NONREG/rs.lus
 create mode 100644 src/test/should_work/NONREG/s.lus
 create mode 100644 src/test/should_work/NONREG/simple.lus
 create mode 100644 src/test/should_work/NONREG/stopwatch.lus
 create mode 100644 src/test/should_work/NONREG/test.exp
 create mode 100644 src/test/should_work/NONREG/test.res
 create mode 100644 src/test/should_work/NONREG/testCA.lus
 create mode 100644 src/test/should_work/NONREG/trivial.lus
 create mode 100644 src/test/should_work/NONREG/trivial2.lus
 create mode 100644 src/test/should_work/NONREG/uu.lus
 create mode 100644 src/test/should_work/NONREG/v1.lus
 rename src/test/{ => should_work/Pascal}/consensus.lus (100%)
 rename src/test/{ => should_work/Pascal}/fby.lus (100%)
 rename src/test/{ => should_work/Pascal}/func_with_body.lus (100%)
 rename src/test/{ => should_work/Pascal}/heater_control.lus (100%)
 rename src/test/{ => should_work/Pascal}/left.lus (100%)
 rename src/test/{ => should_work/Pascal}/newpacks.lus (100%)
 rename src/test/{ => should_work/Pascal}/onlyroll.lus (100%)
 rename src/test/{ => should_work/Pascal}/p.lus (100%)
 rename src/test/{ => should_work/Pascal}/packs.lus (100%)
 rename src/test/{ => should_work/Pascal}/pfs.lus (100%)
 rename src/test/{ => should_work/Pascal}/struct0.lus (100%)
 rename src/test/{ => should_work/Pascal}/t.lus (84%)
 rename src/test/{ => should_work/Pascal}/t0.lus (99%)
 rename src/test/{ => should_work/Pascal}/t1.lus (100%)
 rename src/test/{ => should_work/Pascal}/t2.lus (100%)
 rename src/test/{ => should_work/Pascal}/test.lus (100%)
 rename src/test/{ => should_work/Pascal}/trivial.lus (100%)
 create mode 100644 src/test/should_work/call/bad_call02.lus
 create mode 100644 src/test/should_work/call/call01.lus
 create mode 100644 src/test/should_work/call/call02.lus
 create mode 100644 src/test/should_work/call/call03.lus
 create mode 100644 src/test/should_work/call/call04.lus
 create mode 100644 src/test/should_work/call/call05.lus
 create mode 100644 src/test/should_work/call/call06.lus
 create mode 100644 src/test/should_work/call/call07.lus
 create mode 100644 src/test/should_work/demo/Gyroscope2.lus
 create mode 100644 src/test/should_work/demo/alias.lus
 create mode 100644 src/test/should_work/demo/bred.lus
 create mode 100644 src/test/should_work/demo/bred_lv4.lus
 create mode 100644 src/test/should_work/demo/clock.lus
 create mode 100644 src/test/should_work/demo/clock1_2ms.lus
 create mode 100644 src/test/should_work/demo/decl.lus
 create mode 100644 src/test/should_work/demo/declaration.lus
 create mode 100644 src/test/should_work/demo/def.lus
 create mode 100644 src/test/should_work/demo/filliter.lus
 create mode 100644 src/test/should_work/demo/filter.lus
 create mode 100644 src/test/should_work/demo/lustre_test1_ok.lus
 create mode 100644 src/test/should_work/demo/map_red_iter.lus
 create mode 100644 src/test/should_work/demo/mapdeRed.lus
 create mode 100644 src/test/should_work/demo/mapiter.lus
 create mode 100644 src/test/should_work/demo/mapiter_lv4.lus
 create mode 100644 src/test/should_work/demo/mappredef.lus
 create mode 100644 src/test/should_work/demo/plus.lus
 create mode 100644 src/test/should_work/demo/pre_x.lus
 create mode 100644 src/test/should_work/demo/rediter.lus
 create mode 100644 src/test/should_work/demo/redoptest.lus
 create mode 100644 src/test/should_work/demo/sample_time_change.lus
 create mode 100644 src/test/should_work/demo/test.exp
 create mode 100644 src/test/should_work/demo/tranche.lus
 create mode 100644 src/test/should_work/fab_test/bob.lus
 create mode 100644 src/test/should_work/fab_test/def.lus
 create mode 100644 src/test/should_work/fab_test/ex.lus
 create mode 100644 src/test/should_work/fab_test/iter.lus
 create mode 100644 src/test/should_work/fab_test/iterate.lus
 create mode 100644 src/test/should_work/fab_test/iterate.trace
 create mode 100644 src/test/should_work/fab_test/iterate_var.trace
 create mode 100644 src/test/should_work/fab_test/lecteur.lus
 create mode 100644 src/test/should_work/fab_test/lucky.lus
 create mode 100644 src/test/should_work/fab_test/morel.lus
 create mode 100644 src/test/should_work/fab_test/morel2.lus
 create mode 100644 src/test/should_work/fab_test/morel3.lus
 create mode 100644 src/test/should_work/fab_test/morel4.lus
 create mode 100644 src/test/should_work/fab_test/morel5.lus
 create mode 100644 src/test/should_work/fab_test/noAlarm.lus
 create mode 100644 src/test/should_work/fab_test/notTwo.lus
 create mode 100644 src/test/should_work/fab_test/onlyroll.lus
 create mode 100644 src/test/should_work/fab_test/onlyroll2.lus
 create mode 100644 src/test/should_work/fab_test/test.exp
 create mode 100644 src/test/should_work/fab_test/test.lus
 create mode 100644 src/test/should_work/fab_test/test.res
 create mode 100644 src/test/should_work/fab_test/titi.lus
 create mode 100644 src/test/should_work/fab_test/toolate.lus
 create mode 100644 src/test/should_work/fab_test/toto.lus
 create mode 100644 src/test/should_work/lionel/FillFollowedByRed.lus
 create mode 100644 src/test/should_work/lionel/Gyroscope.lus
 create mode 100644 src/test/should_work/lionel/ProduitBool/produitBool.lus
 create mode 100644 src/test/should_work/lionel/ProduitBool/shiftFill_ludic.lus
 create mode 100644 src/test/should_work/lionel/ProduitBool/shift_ludic.lus
 create mode 100644 src/test/should_work/lionel/arrays.lus
 create mode 100644 src/test/should_work/lionel/calculs_max.lus
 create mode 100644 src/test/should_work/lionel/deSimone.lus
 create mode 100644 src/test/should_work/lionel/iterFibo.lus
 create mode 100644 src/test/should_work/lionel/mapiter.lus
 create mode 100644 src/test/should_work/lionel/matrice.lus
 create mode 100644 src/test/should_work/lionel/matrice2.lus
 create mode 100644 src/test/should_work/lionel/minus.lus
 create mode 100644 src/test/should_work/lionel/moyenne.lus
 create mode 100644 src/test/should_work/lionel/normal.lus
 create mode 100644 src/test/should_work/lionel/pipeline.lus
 create mode 100644 src/test/should_work/lionel/predefOp.lus
 create mode 100644 src/test/should_work/lionel/redIf.lus
 create mode 100644 src/test/should_work/lionel/simpleRed.lus
 create mode 100644 src/test/should_work/lionel/test.exp
 create mode 100644 src/test/should_work/lionel/testSilus.lus
 create mode 100644 src/test/should_work/lionel/triSel.lus
 create mode 100644 src/test/should_work/packEnvTest/Condact.lus
 create mode 100644 src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
 create mode 100644 src/test/should_work/packEnvTest/contractForElementSelectionInArray/main.lus
 create mode 100644 src/test/should_work/packEnvTest/contractForElementSelectionInArray/noeudsIndependants.lus
 create mode 100644 src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
 create mode 100644 src/test/should_work/packEnvTest/contractForElementSelectionInArray/tri.lus
 create mode 100644 src/test/should_work/packEnvTest/modelInst.lus
 create mode 100644 src/test/should_work/packEnvTest/packages.lus
 create mode 100644 src/test/should_work/packEnvTest/packages2.lus
 create mode 100644 src/test/should_work/to_sort_out/asservi.lus
 create mode 100644 src/test/should_work/to_sort_out/const2.lus
 create mode 100644 src/test/should_work/to_sort_out/record.lus
 create mode 100644 src/test/should_work/to_sort_out/test.res

diff --git a/src/TODO b/src/TODO
index c516514e..ec9d9f74 100644
--- a/src/TODO
+++ b/src/TODO
@@ -1,9 +1,22 @@
 
-* Essayer de tronconner le lazyCompiler, 700 lignes, c'est trop (et
-c'est pas fini !)
+*** questions
+
+* instanciation de package <<locaux>> à d'autre package interdite
+pour l'instant, alors que ca marchait chez Youssef.
+
+* should_work/packEnvTest/packages2.lus : le package principal est
+implicite. Autorise-t'on ce genre de truc ?
+
+* should_work/NONREG/simple.lus
+	declaration de structure en ligne ???
 
 
-* autorise t'on les truc du genre:
+* should_work/demo/alias.lus
+	Quid du module Lustre ???
+
+* enum : avec des parentheses ou des accolades ?
+
+* autorise t'on les trucs du genre:
    
         min_4 = min_n<< 4, toto<<2>> >> ;
 
@@ -14,23 +27,37 @@ c'est pas fini !)
 
 ?
 
-* Verifier que les fonctions sont des fonctions etc.
+* Here/NotHere -> à renommer ?
+
+* Ident.idref : a remettre dans SyntaxTree ?
+
+
+***********************************************************************************
+*** a faire
+
+* should_work/fab_test/morel.lus
+ 	-> tranche de tableau
+
+* Essayer de tronconner le lazyCompiler, 700 lignes, c'est trop (et
+c'est pas fini !)
+
+* parser.mly : rajouter les pragma !
+
+* patcher le mode emacs
+	- rajouter modele, package, etc.
+	- l'indentation est vraiment à chier
+
+* Verifier que les fonctions sont des fonctions etc. 
 
 * autoriser le fait le pouvoir donner une valeur par defaut à une constante
  exportée. («provides const : n = 4; »)
 
- * Here/NotHere -> à renommer.
-
-* LazyCompiler.do_node
 
 * Dans les messages d'erreurs, le numero de colonne est faux à cause des tabulations
 
 
 * finir de rédiger le manuel
 
-* Ident.idref : a remettre dans SyntaxTree
-
-* Dump.dump_*
 
 * GenLic
 
@@ -39,10 +66,10 @@ c'est pas fini !)
  qui on pourrait donner du sens via des tableaux et des structures factices
 
 * s'inspirer   de  JB   pour   faire  le   menage   dans  les   items
-  (op,const,type) predefinis ; les tabuler à la place.
+  (op,const,type) predefinis ; les tabuler à la place. Regarder a ce
+  sujet ce qu'a fait Youssef avec son module Lustre.
 
-* "extern", "unsafe", and "memoryless" annotations
-   
+* "extern", "unsafe", and "memoryless" annotations   
 
 Rajouter ces 3 mots clefs dans la syntaxe.
    
diff --git a/src/lexer.mll b/src/lexer.mll
index 6c22d68b..d7f6ad2d 100644
--- a/src/lexer.mll
+++ b/src/lexer.mll
@@ -165,7 +165,8 @@ rule lexer = parse
      eof
 		{ TK_EOF }
 (* saute les blancs *)
-	| [' ' '\t'] +
+(* saute les blancs *)
+  | [' ' '\013' '\009' '\012'] +
 		{ lexer lexbuf }
 (* retour à la ligne *)
 	| '\n'
@@ -179,6 +180,12 @@ rule lexer = parse
 			handle_lexical_error comment_par lexbuf;
 			lexer lexbuf
 		}
+(* commentaire parenthésé bis *)
+	| "/*"
+		{
+			handle_lexical_error comment_par_bis lexbuf;
+			lexer lexbuf
+		}
 (* commentaire en ligne *)
 	| "--"
 		{
@@ -264,6 +271,21 @@ and comment_par = parse
 	|	_
 		{ comment_par lexbuf }
 
+and comment_par_bis = parse
+	  "*/" 
+		{ }
+	| "\n" 
+		{
+			Lxm.new_line ( lexbuf );
+			comment_par_bis lexbuf	
+		}
+	| eof
+		{
+			raise(Lexical_error("unterminated comment", Lxm.dummy))
+		}
+	|	_
+		{ comment_par_bis lexbuf }
+
 and comment_line = parse
 	'\n'
 		{
diff --git a/src/parser.mly b/src/parser.mly
index f0dbc733..0e63591a 100644
--- a/src/parser.mly
+++ b/src/parser.mly
@@ -1194,6 +1194,9 @@ sxStaticArgList:
 		{ [$1] }
 	|	sxStaticArgList TK_COMA sxStaticArg
 		{ $3::$1 }
+	/* let's be permissive... */
+	|	sxStaticArgList TK_SEMICOL sxStaticArg
+		{ $3::$1 }
 	;
 
 /* Faut se tordre l'esprit ici !
diff --git a/src/test/Makefile b/src/test/Makefile
index ae6d6b21..4d5a07c1 100644
--- a/src/test/Makefile
+++ b/src/test/Makefile
@@ -2,70 +2,38 @@ LC=../lus2lic -vl 3
 
 NL="----------------------------------------------------------------------\\n"
 
-test: 
-	echo "Non-regression tests" > test.res
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) newpacks.lus" >> test.res
-	$(LC) newpacks.lus >> test.res 2>&1 
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) struct0.lus" >> test.res
-	$(LC) struct0.lus >> test.res 2>&1 
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) t0.lus" >> test.res
-	$(LC) t0.lus >> test.res 2>&1 || true 
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) t2.lus" >> test.res
-	$(LC) t2.lus >> test.res 2>&1 || true
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) test.lus" >> test.res
-	$(LC) test.lus >> test.res 2>&1
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) trivial.lus" >> test.res
-	$(LC) trivial.lus >> test.res 2>&1
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) x.lus" >> test.res
-	$(LC) x.lus >> test.res 2>&1  || true 
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) consensus.lus" >> test.res
-	$(LC) consensus.lus 2>&1   >> test.res 2>&1 || true
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) left.lus" >> test.res
-	$(LC) left.lus >> test.res 2>&1
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) packs.lus" >> test.res
-	$(LC) packs.lus 2>&1  >> test.res 2>&1
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) p.lus" >> test.res
-	$(LC) p.lus >> test.res 2>&1
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) t.lus" >> test.res
-	$(LC) t.lus >> test.res 2>&1 || true
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) trivial.lus" >> test.res
-	$(LC) trivial.lus >> test.res 2>&1
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) t1.lus" >> test.res
-	$(LC) t1.lus >> test.res 2>&1 || true
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) onlyroll.lus" >> test.res
-	$(LC) onlyroll.lus >> test.res 2>&1
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) heater_control.lus" >> test.res
-	$(LC) heater_control.lus >> test.res 2>&1
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) func_with_body.lus" >> test.res
-	$(LC) func_with_body.lus >> test.res 2>&1 || true
-	\
-	echo " " >> test.res; echo -e "$(NL)====> $(LC) pfs.lus" >> test.res
-	$(LC) pfs.lus >> test.res 2>&1 || true
-	\
-	diff -u test.res.exp test.res > test.diff || (cat test.diff ; echo "cf test.diff")
+
+OK_LUS=$(shell find should_work -name "*.lus" -print)
+
+KO_LUS=$(shell find should_fail -name "*.lus" -print)
+
+test:
+	echo "Non-regression tests" > test_ok.res
+	echo "Those tests are supposed to generate errors" > test_ko.res
+	for d in ${OK_LUS}; do \
+		echo -e "\n$(NL)====> $(LC) $$d" >> test.res; \
+		$(LC) $$d >> test_ok.res 2>&1 ;\
+	done; \
+	for d in ${KO_LUS}; do \
+		echo -e "\n$(NL)====> $(LC) $$d" >> test.res; \
+		$(LC) $$d >> test_ko.res 2>&1 ;\
+	done; \
+	rm -f test.res ; cat test_ok.res test_ko.res > test.res ;\
+	diff -u test.res.exp test.res > test.diff || \
+		(cat test.diff ; echo "cf test.diff")
+
 
 errors_nb:
-	echo -e "There were $(shell grep Error test.res | wc -l) errors."
+	echo -e "There were $(shell grep Error test_ok.res | wc -l) errors."
+	echo -e "There were $(shell grep Warning test_ok.res | wc -l) Warnings."
 
 errors:errors_nb
-	grep Error test.res
+	echo -e "There were $(shell grep Warning test_ok.res | wc -l) Warnings."
+	grep Warning test_ok.res || true
+	echo -e "There were $(shell grep Error test_ok.res | wc -l) errors."
+	grep Error test_ok.res
+
+
 
 utest:
 	cp test.res test.res.exp 
diff --git a/src/test/diff b/src/test/diff
deleted file mode 100644
index c170e054..00000000
--- a/src/test/diff
+++ /dev/null
@@ -1,2114 +0,0 @@
-diff --git a/src/.#compile.ml b/src/.#compile.ml
-deleted file mode 120000
-index 6b9ef0b..0000000
---- a/src/.#compile.ml
-+++ /dev/null
-@@ -1 +0,0 @@
--jahier@peouvou.imag.fr.3380:1190617109
-\ No newline at end of file
-diff --git a/src/compile.ml b/src/compile.ml
-index a45bfaf..08831f1 100644
---- a/src/compile.ml
-+++ b/src/compile.ml
-@@ -42,33 +42,33 @@ let rec first_pack_in = (
- )
- 
- let doit (srclist : Syntaxe.namespace list) (mnode : Syntaxe.idref) = (
--	(* init de la table source *)
--	let srctab = SrcTab.create srclist in
-+  (* init de la table source *)
-+  let srctab = SrcTab.create srclist in
- 
--SrcTab.dump srctab;
-+    SrcTab.dump srctab;
- 
--	(* le pack par défaut est le premier de la liste ... *)
--	let dfltpack = first_pack_in srclist in
-+    (* le pack par défaut est le premier de la liste ... *)
-+    let dfltpack = first_pack_in srclist in
- 
--	(* l'item_ref du noeud *)
--	let mnode_id = fullid_of_idref dfltpack mnode in
-+    (* l'item_ref du noeud *)
-+    let mnode_id = fullid_of_idref dfltpack mnode in
- 
--	(* la clée "absolue" du main node (pas d'args statiques) *)
--	let mnode_key = CompileData.make_simple_node_key mnode_id in
-+    (* la clée "absolue" du main node (pas d'args statiques) *)
-+    let mnode_key = CompileData.make_simple_node_key mnode_id in
- 
--Verbose.put "-- MAIN NODE: \"%s\"\n" (CompileData.string_of_node_key mnode_key);
-+      Verbose.put "-- MAIN NODE: \"%s\"\n" (CompileData.string_of_node_key mnode_key);
- 
--	(* Pour chaque package, on a un solveur de références
--	   globales, pour les types, const et oper :
--		- les références pointées (p::n) sont recherchées
--		directement dans la srctab puisqu'il n'y a pas 
--		d'ambiguité
--		- les références simple sont recherchées :
--        . dans le pack lui-même
--        . dans un des packs déclarés "uses", avec
--        priorité dans l'ordre
--	*)
--	let lzcomp = LazyCompiler.create srctab in
-+      (* Pour chaque package, on a un solveur de références
-+	 globales, pour les types, const et oper :
-+	 - les références pointées (p::n) sont recherchées
-+	 directement dans la srctab puisqu'il n'y a pas 
-+	 d'ambiguité
-+	 - les références simple sont recherchées :
-+         . dans le pack lui-même
-+         . dans un des packs déclarés "uses", avec
-+         priorité dans l'ordre
-+      *)
-+      let lzcomp = LazyCompiler.create srctab in
- 	(* let res = LazyCompiler.do_node lzcomp mnode_key in *)
- 	LazyCompiler.test_types lzcomp ;
- 	() 
-diff --git a/src/dump.ml b/src/dump.ml
-index 5582c88..422050c 100644
---- a/src/dump.ml
-+++ b/src/dump.ml
-@@ -95,9 +95,9 @@ and
- 			  dump_func os {src = lxm; it = finfo}
- 			)
- 	      )
--	) with Not_found -> raise
--	  (Internal_error
--	     ("dump_packbody", "unable to find a definition for \"%d\""))
-+	) with Not_found -> 
-+	  Format.printf "*** unable to find a definition for \"%d\"";
-+	  assert false
-       ) ;
-       Format.fprintf os "@\n"
-     ) in 
-@@ -377,7 +377,7 @@ and dump_left_part_list (os: Format.formatter) (lfts: left_part list) =
-     match lfts with
- 	l::[] ->     dump_left_part os l
-       |	l::reste ->  fprintf os "%a,@,%a" dump_left_part l dump_left_part_list reste
--      |	_ -> raise (Internal_error ("dump_left_part_list", "unexpected case"))
-+      |	_ -> assert false
- 	  
-   )
- and dump_left_part (os: Format.formatter) (lft: left_part) =
-@@ -468,7 +468,13 @@ and dump_by_pos_exp (os: Format.formatter) (oper: by_pos_op) (pars: val_exp list
- 	    (* pseudo-unaire : acces structure *)
-       |	(STRUCT_ACCESS_n fld, [p0]) -> fprintf os "%a.%s"
- 	  dump_val_exp p0 fld
--      |	_ -> raise (Internal_error ("dump_by_pos_exp", "unexpected case"))
-+      | (STRUCT_ACCESS_n _, _) -> assert false
-+
-+      | PROJ_n _ -> assert false 
-+      | FBY_n -> assert false 
-+      | NULL_exp -> assert false 
-+
-+(*       |	_ -> assert false *)
-   )
-     (* les procs standard pour les operateurs predefs *)
- and dump_leaf_exp (os : Format.formatter) (s : string) = (
-@@ -541,7 +547,8 @@ and op2string op = (
-     |	(CONCAT_n ) -> "|"
- 	  (* ternaires *)
-     |	(IF_n     ) -> "if"
--    |	_ -> raise (Internal_error ("dump_by_pos_exp", "unexpected case"))
-+    |	_ -> 
-+	  assert false;
- )
- and dump_oper_exp
-     (os : Format.formatter)
-diff --git a/src/errors.ml b/src/errors.ml
-index bd02838..9c4c81b 100644
---- a/src/errors.ml
-+++ b/src/errors.ml
-@@ -100,11 +100,6 @@ Une erreur plus generale
- ----------------------------------------------------------------------*)
- exception Global_error of string
- 
--(*---------------------------------------------------------------------
--Une erreur qui n'aurrait pas du arriver (fonction, message)
------------------------------------------------------------------------*)
--exception Internal_error of string * string
--
- 
- (*---------------------------------------------------------------------
- Formatage standard des erreurs de compil
-diff --git a/src/eval.ml b/src/eval.ml
-index 0f68135..c6931e9 100644
---- a/src/eval.ml
-+++ b/src/eval.ml
-@@ -1,53 +1,53 @@
- match oper with 
--		TRUE_n     -> 
--	|	FALSE_n    -> 
--	|	ICONST_n s -> (0, function x -> IntVal (int_of_string s) 
--	|	RCONST_n s -> (0, function x -> IntVal (int_of_string s) 
--	|	RCONST_n s -> ICI
--	|	IDENT_n  s -> ICI
--	(* unaires *)
--	|	NOT_n       -> ICI
--	|	UMINUS_n    -> ICI
--	|	PRE_n       -> ICI
--	|	CURRENT_n   -> ICI
--	|	REAL2INT_n  -> ICI
--	|	INT2REAL_n  -> ICI
--	(* binaires *)
--	|	ARROW_n  -> ICI
--	|	WHEN_n   -> ICI
--	|	AND_n    -> ICI
--	|	OR_n     -> ICI
--	|	XOR_n    -> ICI
--	|	IMPL_n   -> ICI
--	|	EQ_n     -> ICI
--	|	NEQ_n    -> ICI
--	|	LT_n     -> ICI
--	|	LTE_n    -> ICI
--	|	GT_n     -> ICI
--	|	GTE_n    -> ICI
--	|	DIV_n    -> ICI
--	|	MOD_n    -> ICI
--	|	MINUS_n  -> ICI
--	|	PLUS_n   -> ICI
--	|	SLASH_n  -> ICI
--	|	TIMES_n  -> ICI
--	|	POWER_n  -> ICI
--	|	HAT_n    -> ICI
--	|	CONCAT_n -> ICI
--	(* ternaires *)
--	|	IF_n   -> ICI
--	|	WITH_n -> ICI
--	(* n-aires *)
--	|	NOR_n     -> ICI
--	|	DIESE_n   -> ICI
--	|	TUPLE_n   -> ICI
--	|	CALL_n s  -> ICI
--	(* tableau (spécial) *)
--	|	ARRAY_n  pl -> ICI
--	(* pseudo-unaire : acces tableau *)
--	|	ARRAY_ACCES_n ix -> ICI
--			ICI
--	|	ARRAY_SLICE_n sl -> ICI
--	(* pseudo-unaire : acces structure *)
--	|	STRUCT_ACCESS_n fld -> ICI
--	|	_ -> raise Internal_error ("ICI")
-+    TRUE_n     -> 
-+  |	FALSE_n    -> 
-+  |	ICONST_n s -> (0, function x -> IntVal (int_of_string s)) 
-+  |	RCONST_n s -> (0, function x -> IntVal (int_of_string s))
-+  |	RCONST_n s -> assert false
-+  |	IDENT_n  s -> assert false
-+	  (* unaires *)
-+  |	NOT_n       -> assert false
-+  |	UMINUS_n    -> assert false
-+  |	PRE_n       -> assert false
-+  |	CURRENT_n   -> assert false
-+  |	REAL2INT_n  -> assert false
-+  |	INT2REAL_n  -> assert false
-+	  (* binaires *)
-+  |	ARROW_n  -> assert false
-+  |	WHEN_n   -> assert false
-+  |	AND_n    -> assert false
-+  |	OR_n     -> assert false
-+  |	XOR_n    -> assert false
-+  |	IMPL_n   -> assert false
-+  |	EQ_n     -> assert false
-+  |	NEQ_n    -> assert false
-+  |	LT_n     -> assert false
-+  |	LTE_n    -> assert false
-+  |	GT_n     -> assert false
-+  |	GTE_n    -> assert false
-+  |	DIV_n    -> assert false
-+  |	MOD_n    -> assert false
-+  |	MINUS_n  -> assert false
-+  |	PLUS_n   -> assert false
-+  |	SLASH_n  -> assert false
-+  |	TIMES_n  -> assert false
-+  |	POWER_n  -> assert false
-+  |	HAT_n    -> assert false
-+  |	CONCAT_n -> assert false
-+	  (* ternaires *)
-+  |	IF_n   -> assert false
-+  |	WITH_n -> assert false
-+	  (* n-aires *)
-+  |	NOR_n     -> assert false
-+  |	DIESE_n   -> assert false
-+  |	TUPLE_n   -> assert false
-+  |	CALL_n s  -> assert false
-+	  (* tableau (spécial) *)
-+  |	ARRAY_n  pl -> assert false
-+	  (* pseudo-unaire : acces tableau *)
-+  |	ARRAY_ACCES_n ix -> assert false
-+	  assert false
-+  |	ARRAY_SLICE_n sl -> assert false
-+	  (* pseudo-unaire : acces structure *)
-+  |	STRUCT_ACCESS_n fld -> assert false
-+  |	_ -> assert false
-diff --git a/src/evalConst.ml b/src/evalConst.ml
-index fbcaafd..9d049b6 100644
---- a/src/evalConst.ml
-+++ b/src/evalConst.ml
-@@ -107,226 +107,226 @@ op_computer :
- ----------------------------------------------------*)
- 
- let op_computer (posop : by_pos_op) (src: Lxm.t)
--= (* retour : (const_eff list -> const_eff_list) option *)
--(
--	(*----------------------------
--		le template pour tous les :
--		bool*bool->bool
--	----------------------------*)
--	let generic_bin_bool
--		(nm : string) 
--		(f : bool -> bool -> bool)
--		(args : const_eff list)
-+    = (* retour : (const_eff list -> const_eff_list) option *)
-+  (
-+    (*----------------------------
-+      le template pour tous les :
-+      bool*bool->bool
-+      ----------------------------*)
-+    let generic_bin_bool
-+	(nm : string) 
-+	(f : bool -> bool -> bool)
-+	(args : const_eff list)
- 	= (
--		match args with
--			[Bool_const_eff v0; Bool_const_eff v1] -> [Bool_const_eff (f v0 v1)]
--		|	[x0; x1] -> (type_error [x0; x1] "bool*bool")
--		|	x        -> (arity_error x "2" )
-+	  match args with
-+	      [Bool_const_eff v0; Bool_const_eff v1] -> [Bool_const_eff (f v0 v1)]
-+	    |	[x0; x1] -> (type_error [x0; x1] "bool*bool")
-+	    |	x        -> (arity_error x "2" )
- 	) in
--	(*----------------------------
--		le template pour tous les :
--		int*int->int
-+      (*----------------------------
-+	le template pour tous les :
-+	int*int->int
- 	----------------------------*)
--	let generic_bin_int
--		(nm : string) 
--		(f : int -> int -> int)
--		(args : const_eff list)
-+    let generic_bin_int
-+	(nm : string) 
-+	(f : int -> int -> int)
-+	(args : const_eff list)
- 	= (
--		match args with
--			[Int_const_eff v0; Int_const_eff v1] -> [Int_const_eff (f v0 v1)]
--		|	[x0; x1] -> (type_error [x0; x1] "int*int")
--		|	x        -> (arity_error x "2" )
-+	  match args with
-+	      [Int_const_eff v0; Int_const_eff v1] -> [Int_const_eff (f v0 v1)]
-+	    |	[x0; x1] -> (type_error [x0; x1] "int*int")
-+	    |	x        -> (arity_error x "2" )
- 	) in
--	(*----------------------------
--		le template pour tous les :
--		num*num->bool
--		N.B. on est obligé de passer 
--		2 "copie" du comparateur
--		(fi pour int, fr pour float)
--		sinon caml ne peut pas typer ...
-+      (*----------------------------
-+	le template pour tous les :
-+	num*num->bool
-+	N.B. on est obligé de passer 
-+	2 "copie" du comparateur
-+	(fi pour int, fr pour float)
-+	sinon caml ne peut pas typer ...
- 	----------------------------*)
--	let generic_num_comp
--		(nm : string)
--		(fi : int -> int -> bool)
--		(fr : float -> float -> bool)
--		(args : const_eff list)
-+    let generic_num_comp
-+	(nm : string)
-+	(fi : int -> int -> bool)
-+	(fr : float -> float -> bool)
-+	(args : const_eff list)
- 	= (
--		match args with
--		[Int_const_eff v0; Int_const_eff v1] -> (
--			[Bool_const_eff (fi v0 v1)]
--		) |
--		[Real_const_eff v0; Real_const_eff v1] -> (
--			let res = (fr v0 v1) in
--			warning src (sprintf "float in static exp: %f%s%f evaluated as %b" v0 nm v1 res);
--			[Bool_const_eff res]
--		) |
--		[x0; x1] -> (type_error [x0; x1] "int*int or real*real")
--		|	x     -> (arity_error x "2" )
-+	  match args with
-+	      [Int_const_eff v0; Int_const_eff v1] -> (
-+		[Bool_const_eff (fi v0 v1)]
-+	      ) |
-+		  [Real_const_eff v0; Real_const_eff v1] -> (
-+		    let res = (fr v0 v1) in
-+		      warning src (sprintf "float in static exp: %f%s%f evaluated as %b" v0 nm v1 res);
-+		      [Bool_const_eff res]
-+		  ) |
-+		      [x0; x1] -> (type_error [x0; x1] "int*int or real*real")
-+	    |	x     -> (arity_error x "2" )
- 	) in
--	(*----------------------------
--		le template pour tous les :
--		num*num->num
-+      (*----------------------------
-+	le template pour tous les :
-+	num*num->num
- 	----------------------------*)
--	let generic_bin_num
--		(nm : string)
--		(fi : int -> int -> int)
--		(fr : float -> float -> float)
--		(args : const_eff list)
-+    let generic_bin_num
-+	(nm : string)
-+	(fi : int -> int -> int)
-+	(fr : float -> float -> float)
-+	(args : const_eff list)
- 	= (
--		match args with
--		[Int_const_eff v0; Int_const_eff v1] -> (
--			[Int_const_eff (fi v0 v1)]
--		) |
--		[Real_const_eff v0; Real_const_eff v1] -> (
--			let res = (fr v0 v1) in
--			warning src (sprintf "float in static exp: %f%s%f evaluated as %f" v0 nm v1 res);
--			[Real_const_eff res]
--		) |
--		[x0; x1] -> (type_error [x0; x1] "int*int or real*real")
--		|	x     -> (arity_error x "2" )
-+	  match args with
-+	      [Int_const_eff v0; Int_const_eff v1] -> (
-+		[Int_const_eff (fi v0 v1)]
-+	      ) |
-+		  [Real_const_eff v0; Real_const_eff v1] -> (
-+		    let res = (fr v0 v1) in
-+		      warning src (sprintf "float in static exp: %f%s%f evaluated as %f" v0 nm v1 res);
-+		      [Real_const_eff res]
-+		  ) |
-+		      [x0; x1] -> (type_error [x0; x1] "int*int or real*real")
-+	    |	x     -> (arity_error x "2" )
- 	) in
--	(*----------------------------
--		Calcul du if
-+      (*----------------------------
-+	Calcul du if
- 	----------------------------*)
--	let compute_if (args : const_eff list) = (
--		match args with 
--		[Bool_const_eff c; x1; x2] -> (
--			let t1 = type_of_const_eff x1 in	
--			let t2 = type_of_const_eff x2 in	
--			if (t1 = t2 ) then (if (c) then [x1] else [x2])
--			else (type_error args "bool*t*t for some type t")
--		)
--		| [x0; x1; x2] -> (type_error args "bool*t*t for some type t")
--		| x -> (arity_error x "3")
--	) in
--	(*----------------------------
--		Calcul de l'égalité
--		N.B. Sur les constantes abstraites
--		on est très méfiant
--		N.B. Sur les types structure,
--		on fait des appels récursifs
-+    let compute_if (args : const_eff list) = (
-+      match args with 
-+	  [Bool_const_eff c; x1; x2] -> (
-+	    let t1 = type_of_const_eff x1 in	
-+	    let t2 = type_of_const_eff x2 in	
-+	      if (t1 = t2 ) then (if (c) then [x1] else [x2])
-+	      else (type_error args "bool*t*t for some type t")
-+	  )
-+	| [x0; x1; x2] -> (type_error args "bool*t*t for some type t")
-+	| x -> (arity_error x "3")
-+    ) in
-+      (*----------------------------
-+	Calcul de l'égalité
-+	N.B. Sur les constantes abstraites
-+	on est très méfiant
-+	N.B. Sur les types structure,
-+	on fait des appels récursifs
- 	----------------------------*)
--	let rec compute_eq 
--		(args : const_eff list)
-+    let rec compute_eq 
-+	(args : const_eff list)
- 	= (
--		let rec fields_eq f0 f1 = (
--			match (f0, f1) with
--			([], []) -> (
--				[Bool_const_eff true]
--			) |
--			((f0,h0)::t0, (f1,h1)::t1) -> (
--				if(f0 <> f1) then (
--					raise (Internal_error ("compute_eq::fields_eq", "unexpected case"))
--				) else
--				match (compute_eq [h0;h1]) with
--					[Bool_const_eff false] -> [Bool_const_eff false]
--				|  [Bool_const_eff true] -> (fields_eq t0 t1) 
--				|	_ -> raise (Internal_error ("compute_eq::fields_eq", "unexpected case"))
--			) |
--			_ -> raise (Internal_error ("compute_eq::fields_eq", "unexpected case"))
--		) in
--		match args with
--			[Bool_const_eff v0; Bool_const_eff v1] -> [Bool_const_eff (v0 = v1)]
--		|	[Int_const_eff v0; Int_const_eff v1] -> [Bool_const_eff (v0 = v1)]
--		|	[Real_const_eff v0; Real_const_eff v1] -> (
--			let res = (v0 = v1) in
--			warning src (sprintf "float in static exp: %f=%f evaluated as %b" v0 v1 res);
--			[Bool_const_eff res]
--		)
--(*
--2007-07 obsolete
--
--		|  [Extern_const_eff (v0, t0); Extern_const_eff (v1, t1)] -> (
--			if (t0 <> t1) then (
--				type_error args "t*t for some type t"
--			) else if (v0 <> v1) then (
--				uneval_error args (
--					sprintf "%s=%s (external constants)"
--					(string_of_fullid v0)
--					(string_of_fullid v1)
--				)
--			) else (
--				[Bool_const_eff true]
--			)
-+	  let rec fields_eq f0 f1 = (
-+	    match (f0, f1) with
-+		([], []) -> (
-+		  [Bool_const_eff true]
-+		) |
-+		    ((f0,h0)::t0, (f1,h1)::t1) -> (
-+		      assert (f0 = f1);
-+		      match (compute_eq [h0;h1]) with
-+			  [Bool_const_eff false] -> [Bool_const_eff false]
-+			| [Bool_const_eff true] -> (fields_eq t0 t1) 
-+			| _ -> assert false
-+		    )
-+	      |
-+		  _ -> assert false
-+	  ) 
-+	  in
-+	    match args with
-+		[Bool_const_eff v0; Bool_const_eff v1] -> [Bool_const_eff (v0 = v1)]
-+	      |	[Int_const_eff v0; Int_const_eff v1] -> [Bool_const_eff (v0 = v1)]
-+	      |	[Real_const_eff v0; Real_const_eff v1] -> (
-+		  let res = (v0 = v1) in
-+		    warning src (sprintf "float in static exp: %f=%f evaluated as %b" v0 v1 res);
-+		    [Bool_const_eff res]
- 		)
--*)
--		|	[Enum_const_eff (v0, t0); Enum_const_eff (v1, t1)] -> (
--			if (t0 = t1) then [Bool_const_eff (v0 =  v1)]
--			             else type_error args "t*t for some type t"
-+		  (*
-+		    2007-07 obsolete
-+
-+		    |  [Extern_const_eff (v0, t0); Extern_const_eff (v1, t1)] -> (
-+		    if (t0 <> t1) then (
-+		    type_error args "t*t for some type t"
-+		    ) else if (v0 <> v1) then (
-+		    uneval_error args (
-+		    sprintf "%s=%s (external constants)"
-+		    (string_of_fullid v0)
-+		    (string_of_fullid v1)
-+		    )
-+		    ) else (
-+		    [Bool_const_eff true]
-+		    )
-+		    )
-+		  *)
-+	      |	[Enum_const_eff (v0, t0); Enum_const_eff (v1, t1)] -> (
-+		  if (t0 = t1) then [Bool_const_eff (v0 =  v1)]
-+		  else type_error args "t*t for some type t"
- 		)
--		|	[Struct_const_eff (f0, t0); Struct_const_eff (f1, t1)] -> (
--			if (t0 = t1) then (fields_eq f0 f1)
--			             else type_error args "t*t for some type t"
-+	      |	[Struct_const_eff (f0, t0); Struct_const_eff (f1, t1)] -> (
-+		  if (t0 = t1) then (fields_eq f0 f1)
-+		  else type_error args "t*t for some type t"
- 		)
--		|	[x;y] -> type_error args "t*t for some type t"
--		|	x -> arity_error args "2"
-+	      |	[x;y] -> type_error args "t*t for some type t"
-+	      |	x -> arity_error args "2"
- 	) in
--(* match principal *)
--match posop with 
-+      (* match principal *)
-+      match posop with 
- 	  TRUE_n     -> (
--		function [] -> [ Bool_const_eff true ] 
--		       | x  -> arity_error x "0"
--		)
-+	    function [] -> [ Bool_const_eff true ] 
-+	      | x  -> arity_error x "0"
-+	  )
- 	| FALSE_n    -> (
--		function [] -> [ Bool_const_eff false ]
--		       | x  -> arity_error x "0"
--		)
-+	    function [] -> [ Bool_const_eff false ]
-+	      | x  -> arity_error x "0"
-+	  )
- 	| ICONST_n s -> (
--		function  [] -> [ Int_const_eff (int_of_string s) ]
--		        | x  -> arity_error x "0"
--		)
-+	    function  [] -> [ Int_const_eff (int_of_string s) ]
-+	      | x  -> arity_error x "0"
-+	  )
- 	| RCONST_n s -> (
--		function  [] -> [ Real_const_eff (float_of_string s) ]
--		        | x  -> arity_error x "0"
--		)
--	| IDENT_n  s -> (raise (Internal_error("op_computer", "unexpected case")))
--	(* unaires *)
-+	    function  [] -> [ Real_const_eff (float_of_string s) ]
-+	      | x  -> arity_error x "0"
-+	  )
-+	| IDENT_n  s -> assert false
-+	    (* unaires *)
- 	| NOT_n       -> (
--		function [Bool_const_eff v] -> [Bool_const_eff (not v)]
--		       | [x] -> type_error [x] "bool"
--		       |  x  -> arity_error x "1"
--	)
-+	    function [Bool_const_eff v] -> [Bool_const_eff (not v)]
-+	      | [x] -> type_error [x] "bool"
-+	      |  x  -> arity_error x "1"
-+	  )
- 	| UMINUS_n    -> (
--		function [Int_const_eff v] -> [Int_const_eff (- v)]
--	          | [Real_const_eff v] -> [Real_const_eff (-. v)]
--		       | [x] -> type_error [x] "int or real"
--		       |  x  -> arity_error x "1"
--		)
-+	    function [Int_const_eff v] -> [Int_const_eff (- v)]
-+	      | [Real_const_eff v] -> [Real_const_eff (-. v)]
-+	      | [x] -> type_error [x] "int or real"
-+	      |  x  -> arity_error x "1"
-+	  )
- 	| PRE_n       -> ( function x -> uneval_error x "pre")
- 	| CURRENT_n   -> ( function x -> uneval_error x "current")
- 	| REAL2INT_n  -> (
--		function
-+	    function
- 		[Real_const_eff v] -> (
--			let res = (int_of_float v) in
--			warning src (sprintf "float2int cast: '%f' converted to '%d'" v res);
--			[Int_const_eff res]
--		)
--		| [x] -> type_error [x] "real"
--		| x   -> arity_error x "1"
-+		  let res = (int_of_float v) in
-+		    warning src (sprintf "float2int cast: '%f' converted to '%d'" v res);
-+		    [Int_const_eff res]
- 		)
-+	      | [x] -> type_error [x] "real"
-+	      | x   -> arity_error x "1"
-+	  )
- 	| INT2REAL_n  -> (
--		function [Int_const_eff v] -> [Real_const_eff (float_of_int v)]
--		| [x] -> type_error [x] "int"
--		| x   -> arity_error x "1"
--	)
--	(* binaires *)
-+	    function [Int_const_eff v] -> [Real_const_eff (float_of_int v)]
-+	      | [x] -> type_error [x] "int"
-+	      | x   -> arity_error x "1"
-+	  )
-+	    (* binaires *)
- 	| ARROW_n  -> ( function x -> uneval_error x "->")
- 	| WHEN_n   -> (
--		function x -> uneval_error x "when"
--	)
--	(* pour les operateurs binaire booléens, on a un seul "template" *)
-+	    function x -> uneval_error x "when"
-+	  )
-+	    (* pour les operateurs binaire booléens, on a un seul "template" *)
- 	| AND_n    -> ( generic_bin_bool "and" (&&) )
- 	| OR_n     -> ( generic_bin_bool "or" (or) )
- 	| XOR_n    -> ( generic_bin_bool "xor" (<>) )
- 	| IMPL_n   -> ( generic_bin_bool "=>" (function x -> function y -> not x or y))
- 	| EQ_n     -> ( compute_eq )
- 	| NEQ_n    -> (
--		function x -> (
--			match (compute_eq x) with
--				[Bool_const_eff v] -> [Bool_const_eff (not v)]
--			|	x -> x 
--			)
--		)
-+	    function x -> (
-+	      match (compute_eq x) with
-+		  [Bool_const_eff v] -> [Bool_const_eff (not v)]
-+		|	x -> x 
-+	    )
-+	  )
- 	| LT_n     -> ( generic_num_comp "<" (<) (<) )
- 	| LTE_n    -> ( generic_num_comp "<=" (<=) (<=) )
- 	| GT_n     -> ( generic_num_comp ">" (>) (>) )
-@@ -337,27 +337,29 @@ match posop with
- 	| PLUS_n   -> ( generic_bin_num "+" (+) (+.) )
- 	| SLASH_n  -> ( generic_bin_num "/" (/) (/.) )
- 	| TIMES_n  -> ( generic_bin_num "*" ( * ) ( *. ) )
--	| POWER_n  -> raise (Internal_error("op_computer", "unexpected case"))
--	(* ternaires *)
-+	| POWER_n  -> assert false
-+	    (* ternaires *)
- 	| IF_n   -> (compute_if)
--	(* n-aires *)
--	| NOR_n     -> raise (Internal_error("op_computer", "unexpected case"))
--	| DIESE_n   -> raise (Internal_error("op_computer", "unexpected case"))
--	| CALL_n s  -> raise (Internal_error("op_computer", "unexpected case"))
--	(* pseudo-unaire : acces structure *)
-+	    (* n-aires *)
-+	| NOR_n     -> assert false
-+	| DIESE_n   -> assert false
-+	| CALL_n s  -> assert false
-+	    (* pseudo-unaire : acces structure *)
- 	| STRUCT_ACCESS_n fid -> (
--		function [Struct_const_eff (flst, typ)] -> (
--			try [List.assoc fid flst]
--			with Not_found -> raise (EvalConst_error(sprintf 
--				"%s is not a field of struct %s" fid (string_of_type_eff(typ))
--			))
--		)
--		| [x] -> type_error [x] "struct type"
--		| x -> arity_error x "1"
--	) |
--	_ -> ( raise (Internal_error ("op_computer", "unexpected case"))
--	)
--)
-+	    function [Struct_const_eff (flst, typ)] -> (
-+	      try [List.assoc fid flst]
-+	      with Not_found -> 
-+		raise (EvalConst_error(
-+			 sprintf 
-+			   "%s is not a field of struct %s" 
-+			   fid (string_of_type_eff(typ))
-+		       ))
-+	    )
-+	      | [x] -> type_error [x] "struct type"
-+	      | x -> arity_error x "1"
-+	  ) |
-+	      _ -> assert false
-+  )
- 
- (*----------------------------------------------------
- Utilitaire :
-@@ -666,17 +668,20 @@ let rec eval_const
- 		) |
- 		    (* extension homomorphe spéciale ? *)
- 		    CALL_n s -> (
--		      raise(Internal_error("eval_by_pos_const", "node call not yet implemented"))
--		    ) | 
--			(* PAS D'EXTENTION HOMOMORPHE IMPLICITE
--
--			   Toutes les autres opérations sont des 
--		 	   cas classiques d'extention homomorphe *)
--			_ -> (
--			  let effargs = List.flatten (List.map rec_eval_const args) in
--			    (* compute_homomorphic_op (op_computer posop lxm) effargs *)
--			    (op_computer posop lxm) effargs
--			)
-+		      print_string "*** node call not yet implemented\n";
-+		      assert false
-+		    ) 
-+	      | 
-+		  (* PAS D'EXTENTION HOMOMORPHE IMPLICITE
-+		     
-+		     Toutes les autres opérations sont des 
-+		     cas classiques d'extention homomorphe *)
-+		  _ -> 
-+		  (
-+		    let effargs = List.flatten (List.map rec_eval_const args) in
-+		      (* compute_homomorphic_op (op_computer posop lxm) effargs *)
-+		      (op_computer posop lxm) effargs
-+		  )
- 	  ) (* FIN DE : eval_by_pos_const *)
- 	(*-------------------------------------*)
- 	(* Fonction récursive secondaire       *)
-diff --git a/src/lazyCompiler.ml b/src/lazyCompiler.ml
-index 6e3b597..a68eefd 100644
---- a/src/lazyCompiler.ml
-+++ b/src/lazyCompiler.ml
-@@ -47,28 +47,28 @@ let recursion_error (lxm : Lxm.t) (stack : string list) = (
- 
- (* Structure principale *)
- type t = {
--	src_tab : SrcTab.t;
--	(* table des defs *)
--	types  : (item_key, CompileData.type_eff chkflaged)   Hashtbl.t ;	
--	consts : (item_key, CompileData.const_eff chkflaged)   Hashtbl.t ;	
--	nodes  : (node_key, CompileData.node_eff chkflaged) Hashtbl.t;
--	(* table des prov *)
--	prov_types  : (item_key, CompileData.type_eff chkflaged)   Hashtbl.t ;	
--	prov_consts : (item_key, CompileData.const_eff chkflaged)   Hashtbl.t ;	
--	prov_nodes  : (node_key, CompileData.node_eff chkflaged) Hashtbl.t
-+  src_tab : SrcTab.t;
-+  (* table des defs *)
-+  types  : (item_key, CompileData.type_eff chkflaged)   Hashtbl.t ;	
-+  consts : (item_key, CompileData.const_eff chkflaged)   Hashtbl.t ;	
-+  nodes  : (node_key, CompileData.node_eff chkflaged) Hashtbl.t;
-+  (* table des prov *)
-+  prov_types  : (item_key, CompileData.type_eff chkflaged)   Hashtbl.t ;	
-+  prov_consts : (item_key, CompileData.const_eff chkflaged)   Hashtbl.t ;	
-+  prov_nodes  : (node_key, CompileData.node_eff chkflaged) Hashtbl.t
- }
- 
- let create srcs = (
--	let res = {
--		src_tab = srcs;
--		types = Hashtbl.create 50;
--		consts =  Hashtbl.create 50;
--		nodes  = Hashtbl.create 50;
--		prov_types = Hashtbl.create 50;
--		prov_consts =  Hashtbl.create 50;
--		prov_nodes  = Hashtbl.create 50;
--	} in
--	res
-+  let res = {
-+    src_tab = srcs;
-+    types = Hashtbl.create 50;
-+    consts =  Hashtbl.create 50;
-+    nodes  = Hashtbl.create 50;
-+    prov_types = Hashtbl.create 50;
-+    prov_consts =  Hashtbl.create 50;
-+    prov_nodes  = Hashtbl.create 50;
-+  } in
-+    res
- )
- 
- (*---------------------------------------------------------------------------------------
-@@ -89,407 +89,418 @@ Compiler, si besoin, le type identifié par tk à
- l'intérieur du pack correspondant.
- *)
- let rec do_type
--(this: t)    (* l'env global *)
--(tk: fullid) (* nom du pack + nom du type *)
--(lxm: Lxm.t) (* l'endroit du source qui a provoqué la demande *)
--= (
--	try (
--		match Hashtbl.find this.types tk with
--		  Checked res -> res
--		| Checking -> raise (Recursion_error (tk, ["type ref "^(Lxm.details lxm)]))	
--		| BadChecked -> raise (BadCheckRef_error)
--	) with
--	Not_found -> (
--		Hashtbl.add this.types tk Checking ;
--		let (p,t) = tk in
--		let lenv = SrcTab.pack_body_env this.src_tab p in
--		(* forcément local, sinon erreur *)
--		let tix = match SymbolTab.find_type lenv t with
-+    (this: t)    (* l'env global *)
-+    (tk: fullid) (* nom du pack + nom du type *)
-+    (lxm: Lxm.t) (* l'endroit du source qui a provoqué la demande *)
-+    = (
-+      try (
-+	match Hashtbl.find this.types tk with
-+	    Checked res -> res
-+	  | Checking -> raise (Recursion_error (tk, ["type ref "^(Lxm.details lxm)]))	
-+	  | BadChecked -> raise (BadCheckRef_error)
-+      ) with
-+	  Not_found -> (
-+	    Hashtbl.add this.types tk Checking ;
-+	    let (p,t) = tk in
-+	    let lenv = SrcTab.pack_body_env this.src_tab p in
-+	      (* forcément local, sinon erreur *)
-+	    let tix = match SymbolTab.find_type lenv t with
-+		SymbolTab.Here x -> x
-+	      | SymbolTab.NotHere _ -> assert false
-+	    in
-+	    let res = check_type_def this tk lxm lenv p tix in
-+	      Hashtbl.replace this.types  tk (Checked res) ;
-+	      res
-+	  )
-+    ) and
-+    (*
-+      Compiler, si besoin, la version provided d'un type :
-+    *)
-+    do_prov_type this tk lxm = (
-+      try (
-+	match Hashtbl.find this.prov_types tk with
-+	    Checked res -> res
-+	  | Checking -> raise (Recursion_error (tk, ["type ref "^(Lxm.details lxm)]))	
-+	  | BadChecked -> raise (BadCheckRef_error)
-+      ) with
-+	  Not_found -> (
-+	    Hashtbl.add this.prov_types tk Checking ;
-+	    let (p,t) = tk in
-+	    let res = ( 
-+	      match SrcTab.pack_prov_env this.src_tab p with
-+		  Some penv -> ( 
-+		    (* forcément local, sinon erreur *)
-+		    let tix = match SymbolTab.find_type penv t with
- 			SymbolTab.Here x -> x
--		|	SymbolTab.NotHere _ -> (
--			raise (Internal_error("LazyCompiler.do_type", "unexpected case"))
--		) in
--		let res = check_type_def this tk lxm lenv p tix in
--		Hashtbl.replace this.types  tk (Checked res) ;
--		res
--	)
--) and
--(*
--	Compiler, si besoin, la version provided d'un type :
--*)
--do_prov_type this tk lxm = (
--	try (
--		match Hashtbl.find this.prov_types tk with
--		  Checked res -> res
--		| Checking -> raise (Recursion_error (tk, ["type ref "^(Lxm.details lxm)]))	
--		| BadChecked -> raise (BadCheckRef_error)
--	) with
--	Not_found -> (
--		Hashtbl.add this.prov_types tk Checking ;
--		let (p,t) = tk in
--		let res = ( 
--		match SrcTab.pack_prov_env this.src_tab p with
--			Some penv -> ( 
--				(* forcément local, sinon erreur *)
--				let tix = match SymbolTab.find_type penv t with
--					SymbolTab.Here x -> x
--				|	SymbolTab.NotHere _ -> (
--					raise (Internal_error("LazyCompiler.do_prov_type", "unexpected case"))
--				) in
--				(* on évalue à l'intérieur de provided *)
--				let prov_type_eff = check_type_def this tk lxm penv p tix in
--				(* on force la compil de la version body (implémentation) *)
--				let body_type_eff = do_type this tk lxm in
--				(* puis, on checke la compatibilité ... *)
--				match prov_type_eff with
--				External_type_eff _ -> (
--					(* ... abstrait -> no souci *)
--					prov_type_eff
--				) | _ -> (
--					(* ... pas abstrait : 
--				   	on compile la def prov dans l'env body, le résultat doit être
--						le même que body_type_eff
--					*)
--					let lenv = SrcTab.pack_body_env this.src_tab p in
--					let prov_type_eff_bis = check_type_def this tk lxm lenv p tix in
--					if ( prov_type_eff_bis = body_type_eff ) then (
--						(* ok *)
--						prov_type_eff
--					) else (
--						raise(Compile_error (
--							tix.src,
--							"provided type inconsistant with its implementation"
--							(* Ici ; afficahge + symap ??? *)
--						))
--					)
--				)  
--			) |
--			None -> (
--				(* pas de provided, on traite en interne ... *)
--				do_type this tk lxm
--			)
--		) in
--		(* on stocke ... *)
--		Hashtbl.replace this.prov_types  tk (Checked res) ;
--		res
--	)
--)
--(*
--Compiler une définition de type
--*)
--and check_type_def
--(this: t)           (* l'env global *)
--tk lxm              (* juste pour les erreurs de récursions *)
--(penv: SymbolTab.t) (* table des symboles courante *) 
--(p: string)         (* nom du pack courant *)
--(tix: Syntaxe.type_info srcflaged) 
-- = try (
--	(* Solveur d'idref pour les  les appels à eval_type/eval_const *)
--	let eval_env = {
--		id2const = (solve_const_idref this penv p) ;
--		id2type = (solve_type_idref this penv p) ;
--	} in 
--	let tinfo = tix.it in
-+		      | SymbolTab.NotHere _ -> assert false
-+		    in
-+		      (* on évalue à l'intérieur de provided *)
-+		    let prov_type_eff = check_type_def this tk lxm penv p tix in
-+		      (* on force la compil de la version body (implémentation) *)
-+		    let body_type_eff = do_type this tk lxm in
-+		      (* puis, on checke la compatibilité ... *)
-+		      match prov_type_eff with
-+			  External_type_eff _ -> (
-+			    (* ... abstrait -> no souci *)
-+			    prov_type_eff
-+			  ) 
-+			| _ -> (
-+			    (* ... pas abstrait : 
-+			       on compile la def prov dans l'env body, le résultat doit être
-+			       le même que body_type_eff
-+			    *)
-+			    let lenv = SrcTab.pack_body_env this.src_tab p in
-+			    let prov_type_eff_bis = check_type_def this tk lxm lenv p tix in
-+			      if ( prov_type_eff_bis = body_type_eff ) then (
-+				(* ok *)
-+				prov_type_eff
-+			      ) else (
-+				raise(Compile_error (
-+					tix.src,
-+					"provided type inconsistant with its implementation"
-+					  (* Ici ; afficahge + symap ??? *)
-+				      ))
-+			      )
-+			  )  
-+		  ) 
-+		|
-+		    None -> (
-+		      (* pas de provided, on traite en interne ... *)
-+		      do_type this tk lxm
-+		    )
-+	    ) in
-+	      (* on stocke ... *)
-+	      Hashtbl.replace this.prov_types  tk (Checked res) ;
-+	      res
-+	  )
-+    )
-+  (*
-+    Compiler une définition de type
-+  *)
-+      and check_type_def
-+    (this: t)           (* l'env global *)
-+    tk lxm              (* juste pour les erreurs de récursions *)
-+    (penv: SymbolTab.t) (* table des symboles courante *) 
-+    (p: string)         (* nom du pack courant *)
-+    (tix: Syntaxe.type_info srcflaged) 
-+    = try (
-+      (* Solveur d'idref pour les  les appels à eval_type/eval_const *)
-+      let eval_env = {
-+	id2const = (solve_const_idref this penv p) ;
-+	id2type = (solve_type_idref this penv p) ;
-+      } in 
-+      let tinfo = tix.it in
- 	match tinfo with
--	  ExternalType s -> External_type_eff (p,s)
--	| AliasedType (s, texp) -> 
--			EvalType.eval_type eval_env texp
--	| EnumType (s, clst) -> (
--		let n : fullid = (p,s) in
--		let putpack x = (p, x.it) in
--		let ncl : fullid list = List.map putpack clst in
-+	    ExternalType s -> External_type_eff (p,s)
-+	  | AliasedType (s, texp) -> 
-+	      EvalType.eval_type eval_env texp
-+	  | EnumType (s, clst) -> (
-+	      let n : fullid = (p,s) in
-+	      let putpack x = (p, x.it) in
-+	      let ncl : fullid list = List.map putpack clst in
- 		Enum_type_eff (n, ncl)
--	)
--	| StructType sti -> (
--		let make_field (fname : string) = (
--			let field_def = Hashtbl.find sti.st_ftable fname in
--			let teff = EvalType.eval_type 
--					eval_env field_def.it.fd_type in
--			match field_def.it.fd_value with
--			None -> (
--				(fname, teff, None)
--			) |
-+	    )
-+	  | StructType sti -> (
-+	      let make_field (fname : string) = (
-+		let field_def = Hashtbl.find sti.st_ftable fname in
-+		let teff = EvalType.eval_type 
-+		  eval_env field_def.it.fd_type in
-+		  match field_def.it.fd_value with
-+		      None -> (
-+			(fname, teff, None)
-+		      ) 
-+		    |
- 			Some vexp -> (
--				let veff = EvalConst.eval_const eval_env vexp in
--				match veff with
--					[v] -> (
--						let tv = type_of_const_eff v in
--						if (tv = teff) then (
--							(fname, teff, Some v)
--						) else raise (Compile_error(field_def.src,
--							Printf.sprintf
--							" this field is declared as '%s' but evaluated as '%s'"
--							(string_of_type_eff teff)
--							(string_of_type_eff tv)
--						))
--					) | _ -> raise ( Compile_error(field_def.src,
--							"bad field value: tuple not allowed" 
--						))
-+			  let veff = EvalConst.eval_const eval_env vexp in
-+			    match veff with
-+				[v] -> (
-+				  let tv = type_of_const_eff v in
-+				    if (tv = teff) then (
-+				      (fname, teff, Some v)
-+				    ) else 
-+				      raise 
-+					(Compile_error(
-+					   field_def.src,
-+					   Printf.sprintf
-+					     " this field is declared as '%s' but evaluated as '%s'"
-+					     (string_of_type_eff teff)
-+					     (string_of_type_eff tv)
-+					 ))
-+				) 
-+			      | _ -> 
-+				  raise ( Compile_error(
-+					    field_def.src,
-+					    "bad field value: tuple not allowed" 
-+					  ))
- 			) 
--		) in
--		let eff_fields = List.map make_field sti.st_flist in
--		let n = (p, sti.st_name) in
-+	      ) in
-+	      let eff_fields = List.map make_field sti.st_flist in
-+	      let n = (p, sti.st_name) in
- 		Struct_type_eff (n, eff_fields)
--	)
--) with
-+	    )
-+    ) with
- 	(* capte et complete/stoppe les recursions *)
- 	Recursion_error (root, stack) -> (
--	if (root = tk) then (
--		(* on stoppe *)
--		recursion_error tix.src stack
--	) else (
--		(* on complete la stack *)
--		raise ( Recursion_error (root, ("type ref "^(Lxm.details lxm))::stack))
-+	  if (root = tk) then (
-+	    (* on stoppe *)
-+	    recursion_error tix.src stack
-+	  ) else (
-+	    (* on complete la stack *)
-+	    raise ( Recursion_error (root, ("type ref "^(Lxm.details lxm))::stack))
-+	  )
- 	)
--)
--and
--(*---------------------------------------------------------------------------------------
--Compiler les consts (avec éval statique)
-------------------------------------------------------------------------------------------
--- do_const      : nom absolu -> const_eff, c'est là qu'on tabule les résultat
-+      and
-+    (*---------------------------------------------------------------------------------------
-+      Compiler les consts (avec éval statique)
-+      -----------------------------------------------------------------------------------------
-+      - do_const      : nom absolu -> const_eff, c'est là qu'on tabule les résultat
- 
--- do_prov_const : nom absolu -> const_eff, c'est là qu'on tabule les résultat
-+      - do_prov_const : nom absolu -> const_eff, c'est là qu'on tabule les résultat
- 
--- check_const_def :
--  * const_info + table de symbole et nom du pack courant
--  * utilisée par do_const et par do_prov_const
--  * utilise, si nécessaire la compil val_exp -> const_eff
--    => voir eval_type/eval_const 
-----------------------------------------------------------------------------------------*)
--do_const
--(this: t)    (* l'env global *)
--(ck: fullid) (* nom du pack + nom de la const *)
--(lxm: Lxm.t) (* l'endroit du source qui a provoqué la demande *)
--= (
--	try (
--		match Hashtbl.find this.consts ck with
--		  Checked res -> res
--		| Checking -> raise (Recursion_error (ck, ["const ref "^(Lxm.details lxm)]))	
--		| BadChecked -> raise (BadCheckRef_error)
--	) with
--	Not_found -> (
--		Hashtbl.add this.consts ck Checking ;
--		let (p,c) = ck in
--		let lenv = SrcTab.pack_body_env this.src_tab p in
--		(* forcément locale, sinon erreur *)
--		let cix = match SymbolTab.find_const lenv c with
-+      - check_const_def :
-+      * const_info + table de symbole et nom du pack courant
-+      * utilisée par do_const et par do_prov_const
-+      * utilise, si nécessaire la compil val_exp -> const_eff
-+      => voir eval_type/eval_const 
-+      ---------------------------------------------------------------------------------------*)
-+    do_const
-+      (this: t)    (* l'env global *)
-+      (ck: fullid) (* nom du pack + nom de la const *)
-+      (lxm: Lxm.t) (* l'endroit du source qui a provoqué la demande *)
-+    = (
-+      try (
-+	match Hashtbl.find this.consts ck with
-+	    Checked res -> res
-+	  | Checking -> raise (Recursion_error (ck, ["const ref "^(Lxm.details lxm)]))	
-+	  | BadChecked -> raise (BadCheckRef_error)
-+      ) with
-+	  Not_found -> (
-+	    Hashtbl.add this.consts ck Checking ;
-+	    let (p,c) = ck in
-+	    let lenv = SrcTab.pack_body_env this.src_tab p in
-+	      (* forcément locale, sinon erreur *)
-+	    let cix = match SymbolTab.find_const lenv c with
-+		SymbolTab.Here x -> x
-+	      |	SymbolTab.NotHere _ -> assert false
-+	    in
-+	    let res = check_const_def this ck lxm lenv p cix in
-+	      Hashtbl.replace this.consts  ck (Checked res) ;
-+	      res
-+	  )
-+    )
-+      and
-+    (*
-+      Compiler, si besoin, la version provided d'une const :
-+      les consts provided sont toujours abstraites
-+    *)
-+    do_prov_const this ck lxm = (
-+      try (
-+	match Hashtbl.find this.prov_consts ck with
-+	    Checked res -> res
-+	  | Checking -> raise (Recursion_error (ck, ["const ref "^(Lxm.details lxm)]))	
-+	  | BadChecked -> raise (BadCheckRef_error)
-+      ) with
-+	  Not_found -> (
-+	    Hashtbl.add this.prov_consts ck Checking ;
-+	    let (p,c) = ck in
-+	    let res = ( 
-+	      match SrcTab.pack_prov_env this.src_tab p with
-+		  Some penv -> ( 
-+		    (* forcément local, sinon erreur *)
-+		    let cix = match SymbolTab.find_const penv c with
- 			SymbolTab.Here x -> x
--		|	SymbolTab.NotHere _ -> (
--			raise (Internal_error("LazyCompiler.do_const", "unexpected case"))
--		) in
--		let res = check_const_def this ck lxm lenv p cix in
--		Hashtbl.replace this.consts  ck (Checked res) ;
--		res
--	)
--)
--and
--(*
--	Compiler, si besoin, la version provided d'une const :
--	les consts provided sont toujours abstraites
--*)
--do_prov_const this ck lxm = (
--	try (
--		match Hashtbl.find this.prov_consts ck with
--		  Checked res -> res
--		| Checking -> raise (Recursion_error (ck, ["const ref "^(Lxm.details lxm)]))	
--		| BadChecked -> raise (BadCheckRef_error)
--	) with
--	Not_found -> (
--		Hashtbl.add this.prov_consts ck Checking ;
--		let (p,c) = ck in
--		let res = ( 
--		match SrcTab.pack_prov_env this.src_tab p with
--			Some penv -> ( 
--				(* forcément local, sinon erreur *)
--				let cix = match SymbolTab.find_const penv c with
--					SymbolTab.Here x -> x
--				|	SymbolTab.NotHere _ -> (
--					raise (Internal_error("LazyCompiler.do_prov_const", "unexpected case"))
--				) in
--				(* on évalue à l'intérieur de provided *)
--				let prov_const_eff = check_const_def this ck lxm penv p cix in
--				(* on force la compil de la version body (implémentation) *)
--				let body_const_eff = do_const this ck lxm in
--				(* puis, on checke la compatibilité ... *)
--				match prov_const_eff with
--				(* les consts provided sont toujours abstraites *)
--				Extern_const_eff _ -> (
--					(* ... abstrait -> no souci *)
--					let tp = type_of_const_eff prov_const_eff in
--					let tb = type_of_const_eff body_const_eff in
--					if (tp = tb) then body_const_eff 
--					else (
--						raise(Compile_error (
--							cix.src,
--							"provided constant inconsistant with its implementation"
--							(* Ici ; affichage + sympa ??? *)
--						))
--					)
--				) | _ -> (
--					(* pas abstrait => impossible ! *) 
--					assert false
--				)  
--			) |
--			None -> (
--				(* pas de provided, on traite en interne ... *)
--				do_const this ck lxm
--			)
--		) in
--		(* on stocke ... *)
--		Hashtbl.replace this.prov_consts  ck (Checked res) ;
--		res
--	)
--)
--and
--(*
--Compiler une définition de const
--*)
--check_const_def
--(this: t)           (* l'env global *)
--ck lxm              (* juste pour les erreurs de récursion *)
--(penv: SymbolTab.t) (* table des symboles courante *) 
--(p: string)         (* nom du pack courant *)
--(cix: Syntaxe.const_info srcflaged) 
--= try (
--	(* Solveur d'idref pour les  les appels à eval_type/eval_const *)
--	let eval_env = {
--		id2const = (solve_const_idref this penv p) ;
--		id2type = (solve_type_idref this penv p) ;
--	} in 
--	let cinfo = cix.it in
-+		      |	SymbolTab.NotHere _ -> assert false
-+		    in
-+		      (* on évalue à l'intérieur de provided *)
-+		    let prov_const_eff = check_const_def this ck lxm penv p cix in
-+		      (* on force la compil de la version body (implémentation) *)
-+		    let body_const_eff = do_const this ck lxm in
-+		      (* puis, on checke la compatibilité ... *)
-+		      match prov_const_eff with
-+			  (* les consts provided sont toujours abstraites *)
-+			  Extern_const_eff _ -> (
-+			    (* ... abstrait -> no souci *)
-+			    let tp = type_of_const_eff prov_const_eff in
-+			    let tb = type_of_const_eff body_const_eff in
-+			      if (tp = tb) then body_const_eff 
-+			      else (
-+				raise(Compile_error (
-+					cix.src,
-+					"provided constant inconsistant with its implementation"
-+					  (* Ici ; affichage + sympa ??? *)
-+				      ))
-+			      )
-+			  ) 
-+			| _ -> (
-+			    (* pas abstrait => impossible ! *) 
-+			    assert false
-+			  )  
-+		  ) 
-+		|
-+		    None -> (
-+		      (* pas de provided, on traite en interne ... *)
-+		      do_const this ck lxm
-+		    )
-+	    ) in
-+	      (* on stocke ... *)
-+	      Hashtbl.replace this.prov_consts  ck (Checked res) ;
-+	      res
-+	  )
-+    )
-+      and
-+    (*
-+      Compiler une définition de const
-+    *)
-+    check_const_def
-+      (this: t)           (* l'env global *)
-+      ck lxm              (* juste pour les erreurs de récursion *)
-+      (penv: SymbolTab.t) (* table des symboles courante *) 
-+      (p: string)         (* nom du pack courant *)
-+      (cix: Syntaxe.const_info srcflaged) 
-+    = try (
-+      (* Solveur d'idref pour les  les appels à eval_type/eval_const *)
-+      let eval_env = {
-+	id2const = (solve_const_idref this penv p) ;
-+	id2type = (solve_type_idref this penv p) ;
-+      } in 
-+      let cinfo = cix.it in
- 	match cinfo with
--	ExternalConst (id, texp) -> (
--		Extern_const_eff ((p,id), EvalType.eval_type eval_env texp)
--	) |
--	EnumConst (id, texp) -> (
-+	    ExternalConst (id, texp) -> (
-+	      Extern_const_eff ((p,id), EvalType.eval_type eval_env texp)
-+	    ) 
-+	  |
-+	      EnumConst (id, texp) -> (
- 		Enum_const_eff ((p,id), EvalType.eval_type eval_env texp)
--	) |
--	DefinedConst (id, texp_opt, vexp ) -> (
-+	      )
-+	  |
-+	      DefinedConst (id, texp_opt, vexp ) -> (
- 		match (EvalConst.eval_const eval_env vexp) with
--		[ceff] -> (
--			match texp_opt with
-+		    [ceff] -> (
-+		      match texp_opt with
- 			  None -> ( ceff)
- 			| Some texp -> (
--				let tdecl = EvalType.eval_type eval_env texp in
--				let teff =  type_of_const_eff ceff in
--				if (tdecl = teff ) then ceff
--				else raise ( Compile_error (cix.src , Printf.sprintf
--						  " this constant is declared as '%s' but evaluated as '%s'"
--						  (string_of_type_eff tdecl)
--						  (string_of_type_eff teff)
--				))
--			)
--		) |
--		_ -> raise (Compile_error (cix.src, "bad constant value: tuple not allowed"))
--	)
--) with Recursion_error (root, stack) -> (
--	(* capte et complete/stoppe les recursions *)
--	if (root = ck) then (
--		recursion_error cix.src stack
--	) else (
--		(* on complete la stack *)
--		raise ( Recursion_error (root, ("const ref "^(Lxm.details lxm))::stack))
--	)
--)
--and
--(*---------------------------------------------------------------------------------------
--Résolution des référence de types et de constantes
-------------------------------------------------------------------------------------------
--Les premiers arguments sont destinés à être currifiés :
--	on obtient alors un "idref -> type_eff"
-----------------------------------------------------------------------------------------*)
--solve_type_idref
--(this: t)           (* l'env global *)
--(penv: SymbolTab.t) (* table des symboles courante *) 
--(curpack: string)         (* nom du pack courant *)
--(idr: Syntaxe.idref)
--(lxm: Lxm.t)
-- = (
--	let s = Syntaxe.name_of_idref idr in
-+			    let tdecl = EvalType.eval_type eval_env texp in
-+			    let teff =  type_of_const_eff ceff in
-+			      if (tdecl = teff ) then ceff
-+			      else raise ( Compile_error (cix.src , Printf.sprintf
-+							    " this constant is declared as '%s' but evaluated as '%s'"
-+							    (string_of_type_eff tdecl)
-+							    (string_of_type_eff teff)
-+							 ))
-+			  )
-+			  )
-+		  |
-+		      _ -> raise (Compile_error (cix.src, "bad constant value: tuple not allowed"))
-+	      )
-+    ) with Recursion_error (root, stack) -> (
-+      (* capte et complete/stoppe les recursions *)
-+      if (root = ck) then (
-+	recursion_error cix.src stack
-+      ) else (
-+	(* on complete la stack *)
-+	raise ( Recursion_error (root, ("const ref "^(Lxm.details lxm))::stack))
-+      )
-+    )
-+      and
-+    (*---------------------------------------------------------------------------------------
-+      Résolution des référence de types et de constantes
-+      -----------------------------------------------------------------------------------------
-+      Les premiers arguments sont destinés à être currifiés :
-+      on obtient alors un "idref -> type_eff"
-+      ---------------------------------------------------------------------------------------*)
-+    solve_type_idref
-+      (this: t)           (* l'env global *)
-+      (penv: SymbolTab.t) (* table des symboles courante *) 
-+      (curpack: string)         (* nom du pack courant *)
-+      (idr: Syntaxe.idref)
-+      (lxm: Lxm.t)
-+    = (
-+      let s = Syntaxe.name_of_idref idr in
- 	match (Syntaxe.pack_of_idref idr) with
--	Some p -> (
--		(* référence absolue -> on refile le boulot à this *)
--		do_prov_type this (p, s) lxm
--	) |
--	None -> (
--		(* on passe par penv pour savoir quoi faire ... *)
--		try (
--			match (SymbolTab.find_type penv s) with
-+	    Some p -> (
-+	      (* référence absolue -> on refile le boulot à this *)
-+	      do_prov_type this (p, s) lxm
-+	    ) |
-+		None -> (
-+		  (* on passe par penv pour savoir quoi faire ... *)
-+		  try (
-+		    match (SymbolTab.find_type penv s) with
- 			SymbolTab.Here _ -> (
--				do_type this (curpack, s) lxm
-+			  do_type this (curpack, s) lxm
- 			) |
--			SymbolTab.NotHere fid -> (
--				(* référence absolue -> on refile le boulot à this *)
--				do_prov_type this fid lxm
--			)
--		) with Not_found -> (
--			raise(Compile_error(lxm,"unbounded type ident"))
-+			    SymbolTab.NotHere fid -> (
-+			      (* référence absolue -> on refile le boulot à this *)
-+			      do_prov_type this fid lxm
-+			    )
-+		  ) with Not_found -> (
-+		    raise(Compile_error(lxm,"unbounded type ident"))
-+		  )
- 		)
--	)
--) and
--solve_const_idref
--(this: t)           (* l'env global *)
--(penv: SymbolTab.t) (* table des symboles courante *) 
--(curpack: string)         (* nom du pack courant *)
--(idr: Syntaxe.idref)
--(lxm: Lxm.t)
--= (
--	let s = Syntaxe.name_of_idref idr in
-+    ) and
-+    solve_const_idref
-+      (this: t)           (* l'env global *)
-+      (penv: SymbolTab.t) (* table des symboles courante *) 
-+      (curpack: string)         (* nom du pack courant *)
-+      (idr: Syntaxe.idref)
-+      (lxm: Lxm.t)
-+    = (
-+      let s = Syntaxe.name_of_idref idr in
- 	match (Syntaxe.pack_of_idref idr) with
--	Some p -> (
--		(* référence absolue -> on refile le boulot à this *)
--		do_prov_const this (p, s) lxm
--	) |
--	None -> (
--(* Printf.printf "solve_const_idref %s\n" s ; *)
--		(* on passe par penv pour savoir quoi faire ... *)
--		try (
--			match (SymbolTab.find_const penv s) with
-+	    Some p -> (
-+	      (* référence absolue -> on refile le boulot à this *)
-+	      do_prov_const this (p, s) lxm
-+	    ) |
-+		None -> (
-+		  (* Printf.printf "solve_const_idref %s\n" s ; *)
-+		  (* on passe par penv pour savoir quoi faire ... *)
-+		  try (
-+		    match (SymbolTab.find_const penv s) with
- 			SymbolTab.Here _ -> (
--				do_const this (curpack, s) lxm
-+			  do_const this (curpack, s) lxm
- 			) |
--			SymbolTab.NotHere fid -> (
--				(* référence absolue -> on refile le boulot à this *)
--				do_prov_const this fid lxm
--			)
--		) with Not_found -> (
--			raise(Compile_error(lxm,"unbounded const ident"))
-+			    SymbolTab.NotHere fid -> (
-+			      (* référence absolue -> on refile le boulot à this *)
-+			      do_prov_const this fid lxm
-+			    )
-+		  ) with Not_found -> (
-+		    raise(Compile_error(lxm,"unbounded const ident"))
-+		  )
- 		)
--	)
--)
-+    )
- 
- 
- 
--let do_node this nodek = (
--	raise (Internal_error ("LazyCompiler.do_node", "not implemented"))
--)
-+let do_node this nodek = assert false
- 
--(*-----------------------------------------------------------------------------------
--Test/debug
-------------------------------------------------------------------------------------*)
-+(*-------------------------------------------------------------------------
-+ Test/debug
-+---------------------------------------------------------------------------*)
- 
- let test_types (this: t) = (
--	(* src_tab : SrcTab.t; *)
--	let testpack pn = (
--		Printf.printf "package %s\n" pn ;
--		let stab = match SrcTab.pack_prov_env this.src_tab pn with
--			Some tab -> tab
--		|	None -> SrcTab.pack_body_env this.src_tab pn
--		in 
--		let testtype n v = (
--			match v with
--			SymbolTab.Here cix -> (
--				(* Printf.printf "   const %s \n" n  *)
--				let teff = do_prov_type this (pn,n) Lxm.dummy  in
--				Printf.printf "   type %s -> %s\n" n 
--				(string_of_type_eff teff)
--			) |
--			SymbolTab.NotHere fid -> (
--				Printf.printf "   type %s -> %s\n" n (string_of_fullid fid) ;
--			)
--		) in
--		SymbolTab.iter_types stab testtype
--	) in
--	let plist = SrcTab.pack_list this.src_tab in 
--	List.iter testpack plist
-+  (* src_tab : SrcTab.t; *)
-+  let testpack pn = (
-+    Printf.printf "package %s\n" pn ;
-+    let stab = match SrcTab.pack_prov_env this.src_tab pn with
-+	Some tab -> tab
-+      |	None -> SrcTab.pack_body_env this.src_tab pn
-+    in 
-+    let testtype n v = (
-+      match v with
-+	  SymbolTab.Here cix -> (
-+	    (* Printf.printf "   const %s \n" n  *)
-+	    let teff = do_prov_type this (pn,n) Lxm.dummy  in
-+	      Printf.printf "   type %s -> %s\n" n 
-+		(string_of_type_eff teff)
-+	  ) 
-+	|
-+	    SymbolTab.NotHere fid -> (
-+	      Printf.printf "   type %s -> %s\n" n (string_of_fullid fid) ;
-+	    )
-+    ) 
-+    in
-+      SymbolTab.iter_types stab testtype
-+  ) 
-+  in
-+  let plist = SrcTab.pack_list this.src_tab in 
-+    List.iter testpack plist
- )
-diff --git a/src/lexer.mll b/src/lexer.mll
-index 0cb5fed..4f167ff 100644
---- a/src/lexer.mll
-+++ b/src/lexer.mll
-@@ -41,6 +41,7 @@ Hashtbl.add keywords "not"        (function x -> TK_NOT x) ;;
- Hashtbl.add keywords "operator"   (function x -> TK_OPERATOR x) ;;
- Hashtbl.add keywords "or"         (function x -> TK_OR x) ;;
- Hashtbl.add keywords "nor"        (function x -> TK_NOR x) ;;
-+Hashtbl.add keywords "fby"        (function x -> TK_FBY x) ;;
- Hashtbl.add keywords "pre"        (function x -> TK_PRE x) ;;
- Hashtbl.add keywords "real"       (function x -> TK_REAL x) ;;
- Hashtbl.add keywords "returns"    (function x -> TK_RETURNS x) ;;
-@@ -123,6 +124,7 @@ let token_code tk = (
- 		| TK_PCENT     lxm -> ("TK_PCENT" , lxm)
- 		| TK_PLUS      lxm -> ("TK_PLUS" , lxm)
- 		| TK_POWER     lxm -> ("TK_POWER" , lxm)
-+		| TK_FBY       lxm -> ("TK_FBY" , lxm)
- 		| TK_PRE       lxm -> ("TK_PRE" , lxm)
- 		| TK_RCONST    lxm -> ("TK_RCONST" , lxm)
- 		| TK_REAL      lxm -> ("TK_REAL" , lxm)
-diff --git a/src/main.ml b/src/main.ml
-index 52e40f9..a377105 100644
---- a/src/main.ml
-+++ b/src/main.ml
-@@ -91,7 +91,6 @@ let lus_load lexbuf = (
- 
- (* Dump d'un packbody *)
- let dump_body (pkg: Syntaxe.packbody) = (
--
-   let os = Format.formatter_of_out_channel stdout in
-     Dump.dump_packbody os pkg	
- )
-@@ -110,11 +109,11 @@ let dump_ns (ns: Syntaxe.namespace) = (
- 	) 
- )
- 
--(*
--  Lance le parser et renvoie la liste name-spaces d'entrée.	
--  Dans le cas d'un fichier sans package, on lui donne
--  comme nom le basename de infile.
--*)q
-+  (*
-+    Lance le parser et renvoie la liste name-spaces d'entrée.	
-+    Dans le cas d'un fichier sans package, on lui donne
-+    comme nom le basename de infile.
-+  *)
- let get_source_list infile lexbuf = (
-   match (lus_load lexbuf) with
-       PRPackBody pbdy -> 
-@@ -154,29 +153,27 @@ let main = (
- 	     (* Compile.compile (pkg_load lexbuf) _LPP_ARGS.main_node  *)
- 	     let nsl = get_source_list _LPP_ARGS.infile lexbuf in
- 	     let nodidf = Syntaxe.idref_of_string _LPP_ARGS.main_node in
--	     let res = Compile.doit nsl nodidf in
--	       () 
-+	       Compile.doit nsl nodidf 
- 	   )
-   ) with
-       Sys_error(s) ->
--	(
--	  prerr_string (s^"\n") ;
--	  exit 1
--	) 
--    |
--	Global_error s -> (
--	  print_global_error s ;
-+	prerr_string (s^"\n") ;
-+	exit 1
-+    | Global_error s ->
-+       print_global_error s ;
- 	  exit 1
--	) 
--    |
--	Parse_error -> (
-+    | Parse_error ->
- 	  print_compile_error (Lxm.last_made ()) "syntax error";
--	  exit 1
--	)
--    | Compile_error(lxm,msg) -> (
-+	exit 1
-+    | Compile_error(lxm,msg) -> 
- 	print_compile_error lxm msg ;
- 	exit 1
--      )
-+    | Assert_failure (file, line, col)  -> 
-+	prerr_string (
-+	  "*** An internal error occured in file "^ file ^ ", line " ^ 
-+	    (string_of_int line) ^ ", column " ^
-+	    (string_of_int col) ^ "\n") ;
-+	exit 2
- 	(* | Compile_node_error(nkey,lxm,msg) -> ( *)
- 	(* print_compile_node_error nkey lxm msg ; *)
- 	(* exit 1 *)
-@@ -185,8 +182,5 @@ let main = (
- 	(* print_global_node_error nkey msg ; *)
- 	(* exit 1 *)
- 	(* ) *)
--    | Internal_error (fname,msg) -> (
--	print_internal_error fname msg ;
--	exit 1
--      )
-+
- )
-diff --git a/src/parser.mly b/src/parser.mly
-index 5277abf..ac66841 100644
---- a/src/parser.mly
-+++ b/src/parser.mly
-@@ -15,14 +15,15 @@ let def_list    = ref []
- (* Interface avec Syntaxe *)
- 
- let idref_of_lxm lxm = (
--	try (
--		Lxm.flagit (
--			Syntaxe.idref_of_string (Lxm.str lxm)
--		) lxm
--	) with _ -> (
--		raise  (Internal_error ("Parser.idref_of_lxm", (Lxm.str lxm)))
--	)	
--)
-+  try (
-+    Lxm.flagit (
-+      Syntaxe.idref_of_string (Lxm.str lxm)
-+    ) lxm
-+  ) with _ ->
-+    print_string  ("Parser.idref_of_lxm" ^(Lxm.str lxm));
-+    assert false
-+  )
-+
- 
- 
- (*---------------------------------------------------------------------
-@@ -82,116 +83,116 @@ let treat_aliased_type lxm typexp = (
-    de constantes enum au niveau syntaxique
- *)
- let treat_enum_type
--	(typlxm: Lxm.t)         (* le lexeme du type *)
--	(cstlxmlst: Lxm.t list) (* liste des lexemes des valeurs *)
--=  (* sortie: unit *)
--(
--	(* On anticipe l'expression de type *)
--	let tir = idref_of_lxm typlxm in
--	let typexp = Lxm.flagit (Named_type_exp tir.it) tir.src
--	in
--	(*  OBSOLETE ET DANGEREUX :
--		Il ne faut pas traiter les decl
--		de constantes enum au niveau syntaxique
--	
--	let put_in_const_tab 
--		(cstlxm: Lxm.t)
--	=  (* output: string *)
--	(
--		let cststr = (Lxm.str cstlxm) in
--		Syntaxe.add_info const_table
--			"constant" cstlxm (EnumConst (cststr, typexp));
--		lexeme_to_string_flaged cstlxm
--	) in 
--	(* On mappe cette fonction pour avoir la liste des noms *)
--	let cstnamelist = List.map put_in_const_tab cstlxmlst in
--	*)
--	let cstnamelist = List.map lexeme_to_string_flaged cstlxmlst in 
--	(* Enfin, on introduit la définition du type *)
--	let typstr = Lxm.str typlxm in
--	Syntaxe.add_info type_table
--		"type" typlxm (EnumType (typstr, cstnamelist));
--	def_list := (TypeItem typstr) :: !def_list
--)
-+    (typlxm: Lxm.t)         (* le lexeme du type *)
-+    (cstlxmlst: Lxm.t list) (* liste des lexemes des valeurs *)
-+    =  (* sortie: unit *)
-+  (
-+    (* On anticipe l'expression de type *)
-+    let tir = idref_of_lxm typlxm in
-+    let typexp = Lxm.flagit (Named_type_exp tir.it) tir.src
-+    in
-+      (*  OBSOLETE ET DANGEREUX :
-+	  Il ne faut pas traiter les decl
-+	  de constantes enum au niveau syntaxique
-+	  
-+	  let put_in_const_tab 
-+	  (cstlxm: Lxm.t)
-+	  =  (* output: string *)
-+	  (
-+	  let cststr = (Lxm.str cstlxm) in
-+	  Syntaxe.add_info const_table
-+	  "constant" cstlxm (EnumConst (cststr, typexp));
-+	  lexeme_to_string_flaged cstlxm
-+	  ) in 
-+      (* On mappe cette fonction pour avoir la liste des noms *)
-+	  let cstnamelist = List.map put_in_const_tab cstlxmlst in
-+      *)
-+    let cstnamelist = List.map lexeme_to_string_flaged cstlxmlst in 
-+      (* Enfin, on introduit la définition du type *)
-+    let typstr = Lxm.str typlxm in
-+      Syntaxe.add_info type_table
-+	"type" typlxm (EnumType (typstr, cstnamelist));
-+      def_list := (TypeItem typstr) :: !def_list
-+  )
- 
- (**********************************)
- (* Traitement d'un type structure *)
- (**********************************)
- let make_struct_type_info
--	(typlxm :  Lxm.t) (* le lexeme du nom de type *)
--	(flexlist: id_valopt list) (* la liste des champs *)
--=  (* sortie: struct_type_info *)
--(
--	(* On anticipe la construction de la table de champs *)
--	let ftab = Hashtbl.create 50 in
--	(* Traitement d'un champ élémentaire *)
--	let put_in_ftab (
--		(lx : Lxm.t),      (* le lexeme du champ *)
--		(ty : type_exp),      (* le type du champ   *)
--		(va : val_exp option) (* l'eventuelle valeur *)
--	) = (* sortie: string *)
--	(
--		(* fabrique le field_info *)
--		let lxstr = Lxm.str lx in
--		let fi = { fd_name = lxstr ; fd_type = ty ; fd_value =va } in
--		(* le range dans ftab *)
--		Syntaxe.add_info ftab "field" lx fi ;
--		(* renvoie juste le nom du champs *)
--		lxstr
--	) in
--	(* remplissage de ftab et recup. de la liste de noms de champ *)  
--	let flst = List.map put_in_ftab flexlist in
--	(* construction du type_info *)
--	let typstr = Lxm.str typlxm in
--	{ st_name = typstr ; st_flist = flst ; st_ftable = ftab }
--)
-+    (typlxm :  Lxm.t) (* le lexeme du nom de type *)
-+    (flexlist: id_valopt list) (* la liste des champs *)
-+    =  (* sortie: struct_type_info *)
-+  (
-+    (* On anticipe la construction de la table de champs *)
-+    let ftab = Hashtbl.create 50 in
-+      (* Traitement d'un champ élémentaire *)
-+    let put_in_ftab (
-+      (lx : Lxm.t),      (* le lexeme du champ *)
-+      (ty : type_exp),      (* le type du champ   *)
-+      (va : val_exp option) (* l'eventuelle valeur *)
-+    ) = (* sortie: string *)
-+      (
-+	(* fabrique le field_info *)
-+	let lxstr = Lxm.str lx in
-+	let fi = { fd_name = lxstr ; fd_type = ty ; fd_value =va } in
-+	  (* le range dans ftab *)
-+	  Syntaxe.add_info ftab "field" lx fi ;
-+	  (* renvoie juste le nom du champs *)
-+	  lxstr
-+      ) in
-+      (* remplissage de ftab et recup. de la liste de noms de champ *)  
-+    let flst = List.map put_in_ftab flexlist in
-+      (* construction du type_info *)
-+    let typstr = Lxm.str typlxm in
-+      { st_name = typstr ; st_flist = flst ; st_ftable = ftab }
-+  )
- 
- let treat_struct_type
--	(typlxm :  Lxm.t) (* le lexeme du nom de type *)
--	(flexlist: id_valopt list) (* la liste des champs *)
--=  (* sortie: unit *)
--(
--	let typstr = Lxm.str typlxm in
--	let typinfo = StructType 
--		(make_struct_type_info typlxm flexlist)
--	in
--	(* met l'info dans la table des types *)
--	Syntaxe.add_info type_table "type" typlxm typinfo ;
--	def_list := (TypeItem typstr) :: !def_list
--)
-+    (typlxm :  Lxm.t) (* le lexeme du nom de type *)
-+    (flexlist: id_valopt list) (* la liste des champs *)
-+    =  (* sortie: unit *)
-+  (
-+    let typstr = Lxm.str typlxm in
-+    let typinfo = StructType 
-+      (make_struct_type_info typlxm flexlist)
-+    in
-+      (* met l'info dans la table des types *)
-+      Syntaxe.add_info type_table "type" typlxm typinfo ;
-+      def_list := (TypeItem typstr) :: !def_list
-+  )
- 
- (*************************************)
- (* Traitement d'une function externe *)
- (*************************************)
- let treat_external_func
--	(funclxm : Lxm.t)   (* le lexeme de la func *)
--	(inpars   : ((Lxm.t list) * type_exp) list) (* liste des ins *)
--	(outpars  : ((Lxm.t list) * type_exp) list) (* liste des outs *)
--= (* sortie: unit *)
--(
--	(* N.B. pas de src_info pour les params formels de fonctions *)
--	let make_a_param 
--		(lxm : Lxm.t) (* le lexeme du param *)
--		(typ : type_exp) (* le type du param *)
-+    (funclxm : Lxm.t)   (* le lexeme de la func *)
-+    (inpars   : ((Lxm.t list) * type_exp) list) (* liste des ins *)
-+    (outpars  : ((Lxm.t list) * type_exp) list) (* liste des outs *)
-+    = (* sortie: unit *)
-+  (
-+    (* N.B. pas de src_info pour les params formels de fonctions *)
-+    let make_a_param 
-+	(lxm : Lxm.t) (* le lexeme du param *)
-+	(typ : type_exp) (* le type du param *)
- 	= (* sortie: (string option * type_exp *)
--	(
--		( Some((Lxm.str lxm)) , typ )
--	) in
--	(* fabrique la liste à plat des inputs *)
--	let flat_ins = Utils.flat_flaged_list inpars make_a_param in
--	(* fabrique la liste à plat des outputs *)
--	let flat_outs = Utils.flat_flaged_list outpars make_a_param in
--	(* fabrique le func_info *)
--	let funcstr = Lxm.str funclxm in
--	let finfo = {
--		fn_name = funcstr;
--		fn_inpars = flat_ins;
--		fn_outpars = flat_outs
--	} in
--	(* range l'info correspondante dans la table des oper *)
--	Syntaxe.add_info oper_table "function or node" funclxm (Func finfo) ;
--	def_list := (OperItem funcstr) :: !def_list
--)
-+      (
-+	( Some((Lxm.str lxm)) , typ )
-+      ) in
-+      (* fabrique la liste à plat des inputs *)
-+    let flat_ins = Utils.flat_flaged_list inpars make_a_param in
-+      (* fabrique la liste à plat des outputs *)
-+    let flat_outs = Utils.flat_flaged_list outpars make_a_param in
-+      (* fabrique le func_info *)
-+    let funcstr = Lxm.str funclxm in
-+    let finfo = {
-+      fn_name = funcstr;
-+      fn_inpars = flat_ins;
-+      fn_outpars = flat_outs
-+    } in
-+      (* range l'info correspondante dans la table des oper *)
-+      Syntaxe.add_info oper_table "function or node" funclxm (Func finfo) ;
-+      def_list := (OperItem funcstr) :: !def_list
-+  )
- 
- (********************************************)
- (* Déclarations de vars et params de noeuds *)
-@@ -208,17 +209,17 @@ type typed_ids = (Lxm.t list * type_exp)
- and clocked_ids = (typed_ids list * clock_exp)
- 
- let rec clocked_ids_to_var_infos vnat vdefs = (
--	let makevar lxm te ce = (
--		Lxm.flagit 
--		{
--			va_nature = vnat ;
--			va_name = (Lxm.str lxm) ;
--			va_type = te ;
--			va_clock = ce ;
--		}
--		lxm
--	) in
--	flat_twice_flaged_list vdefs makevar
-+  let makevar lxm te ce = (
-+    Lxm.flagit 
-+      {
-+	va_nature = vnat ;
-+	va_name = (Lxm.str lxm) ;
-+	va_type = te ;
-+	va_clock = ce ;
-+      }
-+      lxm
-+  ) in
-+    flat_twice_flaged_list vdefs makevar
- )
- 
- let treat_node_decl
-@@ -237,7 +238,7 @@ let treat_node_decl
- 	let vtable = Hashtbl.create 50 in
- 	(*------------------*)
- 	(* Procedure de traitement des in, out ou loc *)
--	(* elle est juste paramétrée par la fonction à fabriquer des var_nature *)
-+	  (* elle est juste paramétrée par la fonction à fabriquer des var_nature *)
- 	(*------------------*)
- 	let rec treat_vars
- 		(vdefs: clocked_ids list) (* la liste à traiter *)
-@@ -258,10 +259,10 @@ let treat_node_decl
- 	in
- 	(* traitement des entrées *)
- 	let make_input nm ty ck = (
--		{ va_nature = VarInput; va_name = nm; va_type = ty; va_clock = ck }
-+	  { va_nature = VarInput; va_name = nm; va_type = ty; va_clock = ck }
- 	) in
- 	let innames = treat_vars indefs make_input in 
--	(* traitement des sorties *)
-+	  (* traitement des sorties *)
- 	let make_output nm ty ck = (
- 		{ va_nature = VarOutput; va_name = nm; va_type = ty; va_clock = ck }
- 	) in
-@@ -341,7 +342,6 @@ let flat_output_ids (vdefs: clocked_ids list) = (
- 
- %token <Lxm.t> TK_AND
- %token <Lxm.t> TK_ARROW
--%token <Lxm.t> TK_ARROW
- %token <Lxm.t> TK_ASSERT
- %token <Lxm.t> TK_BAR
- %token <Lxm.t> TK_BOOL
-@@ -391,6 +391,7 @@ let flat_output_ids (vdefs: clocked_ids list) = (
- %token <Lxm.t> TK_PLUS
- %token <Lxm.t> TK_POWER
- %token <Lxm.t> TK_PRE
-+%token <Lxm.t> TK_FBY
- %token <Lxm.t> TK_RCONST
- %token <Lxm.t> TK_REAL
- %token <Lxm.t> TK_RETURNS
-@@ -432,7 +433,7 @@ let flat_output_ids (vdefs: clocked_ids list) = (
- %left TK_POWER
- %left TK_WHEN
- %nonassoc TK_INT TK_REAL
--%nonassoc TK_UMINUS TK_PRE TK_CURRENT TK_DIESE TK_NOR
-+%nonassoc TK_UMINUS TK_PRE TK_FBY TK_CURRENT TK_DIESE TK_NOR
- %left TK_HAT TK_FIELD TK_DOT
- %right TK_OPEN_BRACKET TK_OPEN_BRACE TK_SEMICOL
- %right TK_COMA
-@@ -1047,6 +1048,7 @@ sxExpression:
- 	|   TK_INT sxExpression      { unexp $1 REAL2INT_n $2 }
- 	|   TK_REAL sxExpression     { unexp $1 INT2REAL_n $2 }
- 	 /* binaires */
-+	|  sxExpression TK_FBY  sxExpression { binexp $2 FBY_n $1 $3 }
- 	|  sxExpression TK_ARROW sxExpression { binexp $2 ARROW_n $1 $3 }
- 	|  sxExpression TK_WHEN  sxExpression { binexp $2 WHEN_n $1 $3 }
- 	|  sxExpression TK_AND   sxExpression { binexp $2 AND_n  $1 $3 }
-@@ -1107,6 +1109,7 @@ sxExpression:
- 
- sxPredefOp:
- 	|   TK_NOT    { {src=$1; it=NOT_n} }
-+	|   TK_FBY    { {src=$1; it=FBY_n} }
- 	|   TK_PRE    { {src=$1; it=PRE_n} }
- 	|   TK_CURRENT{ {src=$1; it=CURRENT_n} } 
- 	|   TK_INT    { {src=$1; it=REAL2INT_n} }
-@@ -1167,35 +1170,36 @@ sxStaticArgList:
- 
- /* Faut se tordre l'esprit ici !
- - la nature est explicite,
--- la nature est immediate (type, const ou node predefini)
--- la nature est sans ambiguite const (expressions simples)
--- la nature est compile-time (juste un ident, a résoudre)
--*/
--sxStaticArg:
--		/* nature explicite */
--		TK_TYPE sxType 
--			{ {src=$1 ; it=StaticArgType $2 } }
-+	  - la nature est immediate (type, const ou node predefini)
-+	  - la nature est sans ambiguite const (expressions simples)
-+	  - la nature est compile-time (juste un ident, a résoudre)
-+	  */
-+	    sxStaticArg:
-+	  /* nature explicite */
-+	    TK_TYPE sxType 
-+	    { {src=$1 ; it=StaticArgType $2 } }
- 	|	TK_CONST sxExpression
--			{ {src=$1 ; it=StaticArgConst $2 } }
-+	    { {src=$1 ; it=StaticArgConst $2 } }
- 	|	TK_NODE sxEffectiveNode
--			{ {src=$1 ; it=StaticArgNode $2.it } }
--		/* un ident OU une expression simple (à résoudre) */
--		/* c'est au retour qu'on choisit */
-+	    { {src=$1 ; it=StaticArgNode $2.it } }
-+	  /* un ident OU une expression simple (à résoudre) */
-+	  /* c'est au retour qu'on choisit */
- 	|	sxSimpleExp
--	{
--		match $1 with 
--		CallByPos (op, x) -> (
--			match op.it with
-+	    {
-+	      match $1 with 
-+		  CallByPos (op, x) -> (
-+		    match op.it with
- 			IDENT_n idref -> (
--				{src=op.src ; it=StaticArgIdent idref }
-+			  {src=op.src ; it=StaticArgIdent idref }
- 			)|
--			_ -> (
--				{src=op.src ; it=StaticArgConst $1}
--			)
--		) | _ -> (
--			raise (Internal_error ("parser", "unexpected static argument" ))
--		)
--	}
-+			    _ -> (
-+			      {src=op.src ; it=StaticArgConst $1}
-+			    )
-+		  ) 
-+		| _ -> 
-+		    print_string "*** unexpected static argument\n";
-+		    assert false
-+	    }
- 		/* un type sans ambiguite */
- 	|	sxSurelyType
- 			{ {src=$1.src; it=StaticArgType $1} }
-diff --git a/src/srcTab.ml b/src/srcTab.ml
-index 732a7da..cf23b5e 100644
---- a/src/srcTab.ml
-+++ b/src/srcTab.ml
-@@ -332,8 +332,8 @@ Verbose.put "    symbol tables for pack %s\n" pname;
- 	) |
- 	Some spflg -> (
- 		let pptab = match pm.pm_provide_stab with
--			Some pt -> pt
--		|	None -> raise (Internal_error ("SrcTab.init_pack_mng_stabs","unexpected case"))
-+		    Some pt -> pt
-+		  | None -> assert false
- 		in
- 		let treat_prov x = (
- 			let lxm = x.src in
-@@ -362,13 +362,16 @@ Associations :
- 
- (* associations idref -> fullid *)
- let find_type (genv: t) (pck: string) (idr: Syntaxe.idref) = (
--	raise (Internal_error ("SrcTab.find_type", "not implemented"))
-+  print_string "*** not implemented.\n";
-+  assert false
- )
- let find_const (genv: t) (pck: string) (idr: Syntaxe.idref) = (
--	raise (Internal_error ("SrcTab.find_const", "not implemented"))
-+  print_string "*** not implemented.\n";
-+  assert false
- )
- let find_oper (genv: t) (pck: string) (idr: Syntaxe.idref) = (
--	raise (Internal_error ("SrcTab.find_oper", "not implemented"))
-+  print_string "*** not implemented.\n";
-+  assert false
- )
- 
- 
diff --git a/src/test/should_fail/clock/clock.lus b/src/test/should_fail/clock/clock.lus
new file mode 100644
index 00000000..81cf8e58
--- /dev/null
+++ b/src/test/should_fail/clock/clock.lus
@@ -0,0 +1,24 @@
+
+-- Entee sur entree
+node clock2(u: bool; v: bool when u) returns (y: bool );
+
+-- Sortie sur sortie
+node clock3(u: bool) returns (x: bool; y: bool when x);
+
+
+-- Entree sur entree et sortie sur sortie
+node clock4(u: bool; v: bool when u) returns (x: bool; y: bool when x);
+
+-- Noeud principale.
+node clock(a: bool; b: bool) returns (c: bool; d: bool when c);
+var
+  z: bool;
+  x: bool when z;
+  y: bool when x;
+let 
+	--  c = clock2(a, (b or b) when a) or (true->a); 
+	--  d = clock2(a, b when a) when c;
+  y = clock2(a, b when a) when x;
+  (z, x) = clock3(z);
+  (c, d) = clock4(a, b when a);
+tel
diff --git a/src/test/should_fail/semantics/activation1.lus b/src/test/should_fail/semantics/activation1.lus
new file mode 100644
index 00000000..53ac313a
--- /dev/null
+++ b/src/test/should_fail/semantics/activation1.lus
@@ -0,0 +1,27 @@
+node up(in: int) returns (out: int);
+let
+  out = pre(in) + 1 ;
+tel
+
+node down(in: int) returns (out: int);
+let
+  out = pre(in) - 1 ;
+tel
+
+node activation1(evt: bool; reset: bool) returns (scie: int);
+var
+  go_up : bool;
+let
+  go_up = true -> if (pre(scie)>=5) then false
+                  else if (pre(scie)<=0) then true
+                       else pre(go_up);
+
+  scie = if reset then 0
+         else (0 -> 	
+               if (go_up)
+               then up(scie)
+               else down(scie) ) ;
+
+
+
+tel
diff --git a/src/test/should_fail/semantics/activation2.lus b/src/test/should_fail/semantics/activation2.lus
new file mode 100644
index 00000000..dbbadc4d
--- /dev/null
+++ b/src/test/should_fail/semantics/activation2.lus
@@ -0,0 +1,24 @@
+node up(in: int) returns (out: int);
+let
+  out = pre(in) + 1 ;
+tel
+
+node down(in: int) returns (out: int);
+let
+  out = pre(in) - 1 ;
+tel
+
+node activation2(evt: bool) returns (scie: int);
+var
+	go_up : bool;
+let
+	go_up = true -> if (pre(scie)>=5) then false
+						 else if (pre(scie)<=0) then true
+						 		else pre(go_up);
+
+	scie = 0 -> if evt then ( if (go_up)
+										then up(scie)
+										else down(scie) )
+			 		else pre(scie) ;
+
+tel
diff --git a/src/test/should_fail/semantics/bad_call01.lus b/src/test/should_fail/semantics/bad_call01.lus
new file mode 100644
index 00000000..76ad16b1
--- /dev/null
+++ b/src/test/should_fail/semantics/bad_call01.lus
@@ -0,0 +1,9 @@
+
+node toto = titi;
+node titi = toto;
+
+node bad_call01(x,y : bool) returns (z : bool);
+let
+	z = toto(x,y);
+tel
+
diff --git a/src/test/should_fail/semantics/bad_call03.lus b/src/test/should_fail/semantics/bad_call03.lus
new file mode 100644
index 00000000..74fed80c
--- /dev/null
+++ b/src/test/should_fail/semantics/bad_call03.lus
@@ -0,0 +1,16 @@
+
+node toto = map<<+,  3>>;
+
+node titi(c,d:real^3)returns(y:real^3);
+let
+	y = toto(c,d);
+tel
+
+node bad_call03(
+	a,b:int^3; c,d:real^3
+) returns (x : int^3; y:real^3
+);
+let
+	x = toto(a,b);
+	y = titi(c,d);
+tel
diff --git a/src/test/should_fail/semantics/bug.lus b/src/test/should_fail/semantics/bug.lus
new file mode 100644
index 00000000..53264d1d
--- /dev/null
+++ b/src/test/should_fail/semantics/bug.lus
@@ -0,0 +1,95 @@
+
+--include "bug_lib.lus"
+-- " X vaut vrai ssi C a valu vrai au moins une fois 
+--   entre A et B "
+node once_from_to (C,A,B: bool) returns (X: bool);
+let
+-- WITH BUG :
+	-- X = implies(B, once_since(C,A));
+-- WITHOUT BUG :
+	X = implies(B, false -> pre(once_since(C,A)));
+tel
+
+-- " X vaut vrai ssi C a valu vrai depuis A "
+node once_since (C,A: bool) returns (X: bool);
+let
+-- WITH BUG :
+	-- X = if A then false else 
+-- WITHOUT BUG :
+        X = if A then C else
+            if after(A) then C or (false -> pre(X))
+	    else false;
+tel
+
+-- " XimpliesY est vrai ssi X=>Y "
+node implies (X,Y : bool) returns (XimpliesY : bool);
+let
+	XimpliesY = (not X) or Y;
+tel
+
+-- " afterX vaut vrai ssi X a valu vrai dans le passe "
+node after (X: bool) returns (afterX: bool);
+var
+     bidon1, bidon2 : bool;
+let
+	afterX = false -> pre(X or afterX) or bidon2 and bidon1;
+        (bidon1, bidon2) = bidon(X);
+tel
+
+-- "edge detecte un changement de front sur le signal d'entree. "
+node edge_detect (in : bool) returns (edge : bool);
+var
+     bidon1, bidon2 : bool;
+let
+        edge = false -> in and not(pre(in)) or bidon2 and bidon1;
+        (bidon1, bidon2) = bidon(in);
+tel
+
+node bidon(in: bool) returns (out1, out2 : bool);
+var
+    toto : tab1;
+let
+        toto[0] = 10;
+	toto[1] = 5;
+
+        out1 = true or in and (toto[0]<20);
+--	out1 = true or in;
+--	out2 = false and in and (toto[1]<10);
+      out2 = false and in;
+tel
+
+-- Exemple de programme qui bug :
+
+const ze_const_int = 5 ;
+
+type bool4 = bool^ze_const_int ;
+     tab2 = int^3^4;
+     tab1 = int^2;
+     tab3 = int^5^6^7;
+     really = real;
+
+
+-- " le noeud bug declenche une alarme si
+--   pendant la periode ou active=vrai, action
+--   n'a pas eu lieu "
+
+-- node bug (active,action : bool) returns (alarm : bool);
+node bug (active,action: bool; intI: int; realI: really) returns (alarm: bool; intO: int; realO: really);
+var
+	begin,en : bool;
+        x,y : int;
+let
+	begin = active -> edge_detect(active);
+	en = edge_detect(not active);
+ 	alarm = not once_from_to(action,begin,en);
+
+        -- intO = 10 -> pre(intO) * intI;
+        -- realO = 10.0 -> pre(realO) * realI;
+        -- (intO, realO) = (10 -> pre(intO) * intI, 10.0 -> pre(realO) * realI);
+        -- (intO, realO) = (10,10.0) -> (pre(intO) * intI, pre(realO) * realI);
+        (intO, realO) = (ze_const_int+x+y,10.0-10.0-10.0) -> (intI, pre(realO) * realI);
+
+        x = 0 -> if active then y else pre(x)+1;
+        y = 1 -> if active then pre(y)+1 else x;
+tel
+
diff --git a/src/test/should_fail/semantics/const.lus b/src/test/should_fail/semantics/const.lus
new file mode 100644
index 00000000..44bbf68d
--- /dev/null
+++ b/src/test/should_fail/semantics/const.lus
@@ -0,0 +1,46 @@
+type 
+  t1, t2, t3;
+  h = int;
+  h1 = int;
+  h2 = int;
+  h3 = int;
+  t11 = t1^2;
+  t22 = t2^2;
+  t33 = int^c4;
+  arr = int^c4;
+  arr2 = int^c4;
+  arr3 = arr;
+  arr4 = arr;
+  t4  = b^4;
+  t41 = t4;
+  t42 = t4;
+  t43 = t41;
+  t5  = {c1: int, c2: bool^5, c3: t3^3, c4: t3^3};
+  t55 = {c4: bool, c2: bool^5, c3: t3^3, c4: t3^3};
+  t56 = t5;
+  t6  = t1^4;
+  t65 = t1^4;
+  t7  = t8; 
+  t8  = t9;
+  t9  = int;
+ a   = t4^(2+3);
+  b   = t6;
+  e = t1;
+  e1 = e;
+  couleur = enum{bleu, vert, rouge};
+  flag = {c1: couleur, c2: couleur, c3: couleur};
+  structure = {c1: int, c2: real, c3: bool};
+
+const 
+  c1, c2, c3: int;
+  ext: int;
+  c4: int = 5+2+3+4;
+  c5 = true;
+  c6 = ext;
+  c7 = bleu;
+  c8 = c5 or c5;
+  --c8 = c4*3+5;
+  c9 = c4+3=7;
+  c10 = not(c5 and c9);   
+
+node node1(a: int) returns (a: int);
diff --git a/src/test/should_fail/semantics/cpt_dc.lus b/src/test/should_fail/semantics/cpt_dc.lus
new file mode 100644
index 00000000..ea93e9bf
--- /dev/null
+++ b/src/test/should_fail/semantics/cpt_dc.lus
@@ -0,0 +1,24 @@
+
+
+node cpt_dc
+   (
+   evt : bool;
+   reset : bool
+   )
+returns
+   (
+   cpt : int
+   );
+
+var
+   _f3 : bool;
+   _f4 : int;
+   
+let
+   _f3 = false;
+   _f4 = cpt;
+   cpt = if (reset) then (0) else ((if (_f3) then (0) else (_f4)) + (if (evt
+) then (1) else (0)));
+   
+tel
+
diff --git a/src/test/should_fail/semantics/def.lus b/src/test/should_fail/semantics/def.lus
new file mode 100644
index 00000000..9b6ea36c
--- /dev/null
+++ b/src/test/should_fail/semantics/def.lus
@@ -0,0 +1,18 @@
+type 
+  int4 = int^4;
+  st = {x: int4 };
+  
+node def(a: bool) returns (b: st);
+var
+  c: st;
+let
+-- illustrating a dependance loop
+  b.x[0] = c.x[0];
+  b.x[1] = c.x[0];
+  b.x[2] = c.x[0];
+  b.x[3] = c.x[0];
+  c.x[0] = b.x[0];
+  c.x[1] = b.x[1];
+  c.x[2] = b.x[2];
+  c.x[3] = b.x[3];
+tel
diff --git a/src/test/should_fail/semantics/import2.lus b/src/test/should_fail/semantics/import2.lus
new file mode 100644
index 00000000..74265519
--- /dev/null
+++ b/src/test/should_fail/semantics/import2.lus
@@ -0,0 +1,6 @@
+node imp(x,y: int) returns (z,t: int);
+node import2(a: int) returns (d: int);
+var c: int;
+let
+	(c,d) = imp(a,c);
+tel
diff --git a/src/test/should_fail/semantics/m.lus b/src/test/should_fail/semantics/m.lus
new file mode 100644
index 00000000..15a2b907
--- /dev/null
+++ b/src/test/should_fail/semantics/m.lus
@@ -0,0 +1,29 @@
+
+type 
+        tube = {in:int, out:int} ;
+        toto = {titi:tube, tutu:bool} ;
+				
+
+node m(i:int) returns (f:int^2);
+var 
+	yo : int^4^5^6;
+let
+	--f = mcmorel(i);
+	f[0] = yo[0][1][2];
+	f[1] = yo[5][4][3];
+	--yo = 42^4^5^6;
+	yo = i^4^5^6 ;
+	yo[5][4][3] = i ;
+         
+tel
+
+node mcmorel(i:int) returns (t:int^2);
+var
+        yo : toto;
+let
+       -- yo.titi = tube{in=i, out=i+1} ;
+       -- yo.tutu = true ;
+        t[0] = [yo.titi.in, yo.titi.out] -> [pre(t[0])+1,pre(t[1])] ;
+tel
+
+				
diff --git a/src/test/should_fail/semantics/not_a_constant.lus b/src/test/should_fail/semantics/not_a_constant.lus
new file mode 100644
index 00000000..cf27b264
--- /dev/null
+++ b/src/test/should_fail/semantics/not_a_constant.lus
@@ -0,0 +1,13 @@
+model Int 
+  needs 
+     const n:int;
+  provides   
+     type Int;
+     const zero: Int;
+
+body
+type Int = bool^n;
+const zero = false^n; -- n is not a constant
+
+
+
diff --git a/src/test/should_fail/semantics/piege.lus b/src/test/should_fail/semantics/piege.lus
new file mode 100644
index 00000000..cb1b3a87
--- /dev/null
+++ b/src/test/should_fail/semantics/piege.lus
@@ -0,0 +1,17 @@
+
+node piege(in : bool) returns (out : bool);
+let
+   out = in and aux1(aux2(out,out));
+tel
+
+node aux1(in1, in2 : bool) returns (out : bool);
+let
+   out = in1 or (true -> pre(in2)); 
+tel
+
+node aux2(in1, in2 : bool) returns (out1, out2 : bool);
+let
+   out1 = true -> pre(in1);
+   out2 = in2;
+tel
+
diff --git a/src/test/x.lus b/src/test/should_fail/semantics/x.lus
similarity index 79%
rename from src/test/x.lus
rename to src/test/should_fail/semantics/x.lus
index 6c306f08..6775086d 100644
--- a/src/test/x.lus
+++ b/src/test/should_fail/semantics/x.lus
@@ -1,3 +1,4 @@
+-- there is a loop !!!
 const n = m * 2;
 
 const m = x + y;
diff --git a/src/test/should_fail/type/Gyro.lus b/src/test/should_fail/type/Gyro.lus
new file mode 100644
index 00000000..f3b8ba39
--- /dev/null
+++ b/src/test/should_fail/type/Gyro.lus
@@ -0,0 +1,374 @@
+const DELTA_ROLL = 2.0;
+const DELTA_PITCH = 2.0;
+const DELTA_YAW = 2.0;
+const GOD_ROLL = 15.0;
+const GOD_PITCH = 16.0;
+const GOD_YAW = 14.0;
+const DELTA_TO_GOD_ROLL = 2.0;
+const DELTA_TO_GOD_PITCH = 2.0;
+const DELTA_TO_GOD_YAW = 2.0;
+const CROSS_CHANNEL_TOLERANCE = 1.0;
+type Valid_ChannelT={local_failure : bool,local_value : real};
+type Faulty_ChannelT={valuea : real,valueb : real};
+type Faulty_Array=Faulty_ChannelT^4^3;
+type CFF_Eltstruct={indx : int,indx_toChange : int,value : Valid_ChannelT};
+type CFF_struct={indx : int,indx_toChange : int,tabToFill : Valid_ChannelT^3};
+
+
+node countFalse(accu_in : real; elt_in : Valid_ChannelT) returns (accu_out : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   accu_out = if(elt_in.local_failure) then accu_in else (accu_in + 1.0);
+tel
+
+
+node countValidChannels(channels : Valid_ChannelT^4) returns (nb : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   nb = red<<countFalse;4>>(0.0,channels);
+tel
+
+
+node sum(accu_in : real; elt_in : real) returns (accu_out : real);
+-- Assumes : 
+-- var : 
+-- varBidon : real(varBidon < elt_in);
+-- Guarantees : 
+-- var : 
+-- otherVarBidon : real((elt_in + otherVarBidon) < accu_out);
+-- Body : 
+let
+   accu_out = (accu_in + elt_in);
+tel
+
+
+node masking(channel : Valid_ChannelT) returns (out : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   out = if(channel.local_failure) then 0.0 else channel.local_value;
+tel
+
+
+node abs(in : real) returns (out : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   out = if((in < 0.0)) then -(in) else in;
+tel
+
+
+node TooFar(nbToFarIn : int; channel : Valid_ChannelT; god : real; delta_to_god : real) returns (nbToFarOut : int);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   nbToFarOut = if((abs((channel.local_value - god)) < delta_to_god)) then (nbToFarIn + 1) else nbToFarIn;
+tel
+
+
+
+node assumeVoter(channels : Valid_ChannelT^4; god : real; delta_to_god : real) returns (assumeOK : bool);
+let
+   assumeOK = true;
+tel
+
+
+node iteratedVoter(acc_in :  bool; channel : Valid_ChannelT; god,  delta_to_god, vote : real) returns (acc_out : bool);
+let
+  acc_out = acc_in and (channel.local_failure or (abs((vote - channel.local_value)) < delta_to_god));
+tel
+
+node guaranteeVoter(channels : Valid_ChannelT^4; god : real; delta_to_god : real; vote : real) returns (guaranteeOK : bool);
+let
+  guaranteeOK = red<<iteratedVoter;4>>(true, channels, god^4, delta_to_god^4, vote^4);
+tel
+
+
+
+node Voter(channels : Valid_ChannelT^4; god : real; delta_to_god : real) returns (vote : real)
+%ASSUME:assumeVoter%
+%GUARANTEE:guaranteeVoter%;
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- (channels.local_failure or (abs((vote - channels.local_value)) < delta_to_god));
+-- Body : 
+   var globalSum : real; nbValid : real; mask : real^4; 
+let
+   nbValid = countValidChannels(channels);
+   globalSum = red<<sum;4>>(0.0,mask);
+   vote = (globalSum / nbValid);
+   mask = map<<masking;4>>(channels);
+tel
+
+
+node addOneChannelIter(acc_in : CFF_Eltstruct; elt_in : Valid_ChannelT) returns (acc_out : CFF_Eltstruct; elt_out : Valid_ChannelT);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   acc_out = {indx = (acc_in.indx + 1),
+indx_toChange = acc_in.indx_toChange,
+value = acc_in.value};
+   elt_out = if((acc_in.indx = acc_in.indx_toChange)) then acc_in.value else elt_in;
+tel
+
+
+node addOneChannel(indx_toChange : int; channeltToAdd : Valid_ChannelT; tabToFill : Valid_ChannelT^3) returns (tabToFillAfter : Valid_ChannelT^3);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var acc_out : CFF_Eltstruct; 
+let
+   acc_out,tabToFillAfter = map_red<<addOneChannelIter;3>>({indx = 0,
+indx_toChange = indx_toChange,
+value = channeltToAdd},tabToFill);
+tel
+
+
+node CFC_iter(structIn : CFF_struct; currentChannel : Valid_ChannelT) returns (structOut : CFF_struct);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   structOut = {indx = (structIn.indx + 1),
+indx_toChange = structIn.indx_toChange,
+tabToFill = if((structIn.indx_toChange = structIn.indx)) then structIn.tabToFill else addOneChannel(structIn.indx, currentChannel, structIn.tabToFill)};
+tel
+
+
+node ComputeForeignChannels(currentChannelIndx : int; allChannels : Valid_ChannelT^4) returns (foreignChannels : Valid_ChannelT^3);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var acc_out : CFF_struct; localtabToFill : Valid_ChannelT; 
+let
+  localtabToFill = {local_failure = false,
+                    local_value = 0.0};
+  acc_out = red<<CFC_iter;4>>({indx = 0,
+                              indx_toChange = currentChannelIndx,
+                              tabToFill = localtabToFill^3},allChannels);
+  foreignChannels = acc_out.tabToFill;
+tel
+
+
+node compare_rolls(acc_in : Valid_ChannelT; channel : Valid_ChannelT) returns (acc_out : Valid_ChannelT; diff : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   acc_out = acc_in;
+   diff = (abs((acc_in.local_value - channel.local_value)) > CROSS_CHANNEL_TOLERANCE);
+tel
+
+
+node selectFailure(from : Valid_ChannelT) returns (failure : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+  failure = from.local_failure;
+tel
+
+
+node values_nok(localChannel : Valid_ChannelT; foreign_Channels : Valid_ChannelT^3) returns (cross_failure : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var diff : bool^3; lc : Valid_ChannelT; 
+let
+  lc,diff = map_red<<compare_rolls;3>>(localChannel,
+                                       foreign_Channels);
+  cross_failure = if(selectFailure(foreign_Channels[0])) 
+                  then if(selectFailure(foreign_Channels[1])) 
+                       then if(selectFailure(foreign_Channels[2])) 
+                            then false 
+                            else diff[2] 
+                       else if(selectFailure(foreign_Channels[2])) 
+                            then diff[1] 
+                            else (diff[1] and diff[2]) 
+                  else if(selectFailure(foreign_Channels[1])) 
+                       then if(selectFailure(foreign_Channels[2])) 
+                            then diff[0] 
+                            else (diff[0] and diff[2]) 
+                       else if(selectFailure(foreign_Channels[2])) 
+                            then (diff[0] and diff[1]) 
+                            else ((diff[0] and diff[1]) and diff[2]);
+tel
+
+
+node CrossFailDetect(currentChannel : int; localChannel : Valid_ChannelT; previousOutChannel : Valid_ChannelT^4) returns (crossFailure : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var foreign_Channels : Valid_ChannelT^3; 
+let
+   foreign_Channels = ComputeForeignChannels(currentChannel, previousOutChannel);
+   crossFailure = values_nok(localChannel, foreign_Channels);
+tel
+
+
+
+
+
+node assumeChannel(previousOutChannel : Faulty_ChannelT^4; 
+                   nbInChannel : int;
+                   inChannel : Faulty_ChannelT; 
+                   delta : real; god : real; delta_to_god : real) 
+returns (assumeOK : bool);
+let
+   assumeOK = true;
+tel
+
+
+node guaranteeChannel(previousOutChannel : Faulty_Channel^4; 
+                      nbInChannel : int;
+                      inChannel : Faulty_ChannelT; 
+                      delta : real; god : real; delta_to_god : real; 
+                      nextOutChannel : Faulty_Channel^4; outChannel : Valid_ChannelT) 
+returns (guaranteeOK : bool);
+let
+   guaranteeOK = outChannel.local_failure or ((abs((inChannel.valuea - outChannel.local_value)) < delta) and (abs((inChannel.valueb - outChannel.local_value)) < delta));
+tel
+
+
+
+
+node Channel(previousOutChannel : Faulty_ChannelT^4; 
+             nbInChannel : int; 
+             inChannel : Faulty_ChannelT; 
+             delta : real; god : real; delta_to_god : real) 
+returns (nextOutChannel : Faulty_ChannelT^4; outChannel : Valid_ChannelT)
+%ASSUME:assumeChannel%
+%GUARANTEE:guaranteeChannel%;
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- (outChannel.local_failure or ((abs((inChannel.valuea - outChannel.local_value)) < delta) and (abs((inChannel.valueb - outChannel.local_value)) < delta)));
+-- Body : 
+   var localChannel : Valid_ChannelT; 
+let
+   localChannel = {local_failure = (abs((inChannel.valuea - inChannel.valueb)) > delta),
+                   local_value = if((abs((inChannel.valuea - inChannel.valueb)) > delta)) then 0.0 else ((inChannel.valuea + inChannel.valueb) / 2.0)};
+   outChannel = {local_failure = (localChannel.local_failure or CrossFailDetect(nbInChannel, localChannel, localChannel^4)),
+                 local_value = localChannel.local_value};
+   nextOutChannel = previousOutChannel;
+tel
+
+
+
+
+node assumeEvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real) returns (assumeOK : bool);
+var NbToFar : int;
+let
+   NbToFar = red<<TooFar;4>>(0,channels,god^4,delta_to_god^4);
+   assumeOK = NbToFar <= 1;
+tel
+
+
+node guaranteeEvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real; AxisValue : real) returns (guaranteeOK : bool);
+let
+  guaranteeOK = abs((AxisValue - god)) < delta_to_god;
+tel
+
+
+node EvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real) returns (AxisValue : real)
+%ASSUME:assumeEvaluateAxis%
+%GUARANTEE:guaranteeEvaluateAxis%;
+-- Assumes : 
+-- var : 
+-- NbToFar : int((NbToFar = red<<TooFar;4>>(0,channels,god^4,delta_to_god^4)) and (NbToFar <= 1));
+-- Guarantees : 
+-- (abs((AxisValue - god)) < delta_to_god);
+-- Body : 
+   var resChannels : Faulty_ChannelT^4; dumbChannel : Faulty_ChannelT^4; initChannels : Valid_ChannelT^4; mapredInit : Faulty_ChannelT^4; 
+let
+  initChannels = { local_failure = false,
+                   local_value = 0.0	}^4	;
+
+
+
+-- TYPE ERROR !
+-- Y-lv6 msg was: 
+-- left and right part types differs.
+--	 left found:({valuea:real,valueb:real}^4,{valuea:real,valueb:real}^4)
+--	 right found:({valuea:real,valueb:real}^4,{local_failure:bool,local_value:real}^4)
+   dumbChannel,resChannels = map_red<<Channel;4>>(mapredInit,[0,1,2,3],channels,delta^4,god^4,delta_to_god^4);
+   AxisValue = Voter(resChannels, god, delta_to_god);
+   mapredInit = (initChannels -> pre(resChannels));
+tel
+
+
+node ValueIsSecure(secure_value : real; delta_to_god_value : real; god_value : real) returns (is_valid : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   is_valid = (abs((secure_value - god_value)) < delta_to_god_value);
+tel
+
+
+node ValueIsSecureII(accu_in : bool; secure_value : real; god_value : real) returns (is_valid : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   is_valid = ((abs((secure_value - god_value)) < 2.0) and accu_in);
+tel
+
+
+node Gyroscope2(axis : Faulty_Array) returns (valid : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var secure_values : real^3; 
+let
+   secure_values = map<<EvaluateAxis;3>>(axis,
+                                         [DELTA_ROLL,DELTA_PITCH,DELTA_YAW],
+                                         [GOD_ROLL,GOD_PITCH,GOD_YAW],
+                                         [DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW]);
+--   valid = forall<<ValueIsSecure;3>>(secure_values,[DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW],[GOD_ROLL,GOD_PITCH,GOD_YAW]);
+   valid = red<<ValueIsSecure;3>>(true, 
+                                  secure_values, 
+                                  [DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW],
+                                  [GOD_ROLL,GOD_PITCH,GOD_YAW]);
+tel
diff --git a/src/test/should_fail/type/const2.lus b/src/test/should_fail/type/const2.lus
new file mode 100644
index 00000000..ba01eef2
--- /dev/null
+++ b/src/test/should_fail/type/const2.lus
@@ -0,0 +1,28 @@
+const
+  M = if ((c1*2-2) mod 2 = (1+1)*2 div 2 - 2) then 3 else 6; 
+  N = if (c1>3) then 4 else 7; 
+  O = if (not c7 xor 2>3) then 5 else 8; 
+  P = (-N-M*O+3) div -3;
+  c1: int = 2;
+  c2: bool = true;
+  c3: real = 3.14;
+  c4, c5, c6: int^2;
+  c7 = true or false and c2 => true xor false;
+  c8: int = c1*3;
+  c9=not false;
+  c10=3;
+
+  e2 = 3+2.5;
+  e1 = if(2<>6.5) then true+1 else 2->4;
+
+
+
+type
+  t1 = int;
+  t2 = t1^M;
+  t3 = t2^N;
+  t4 = t3^O;
+  t5 = t4^P;
+  t6 = t5^c10;
+  t7 = t6^O;
+  t8 = t7^O;
\ No newline at end of file
diff --git a/src/test/should_work/NONREG/CURRENT.lus b/src/test/should_work/NONREG/CURRENT.lus
new file mode 100644
index 00000000..462150c8
--- /dev/null
+++ b/src/test/should_work/NONREG/CURRENT.lus
@@ -0,0 +1,5 @@
+node CURRENT(x: bool; y: bool when x)
+returns (z: bool when x);
+let
+  z = y;
+tel
diff --git a/src/test/should_work/NONREG/Int.lus b/src/test/should_work/NONREG/Int.lus
new file mode 100644
index 00000000..93b4052b
--- /dev/null
+++ b/src/test/should_work/NONREG/Int.lus
@@ -0,0 +1,49 @@
+model Int 
+needs const n:int;
+provides
+type Int;
+const zero: Int;
+function incr (x: Int) returns (incr: Int);
+function add (x,y: Int) returns (sum: Int);
+body
+type Int = bool^n;
+const zero = false^n;
+function incr (x: Int) returns (incr: Int);
+var co: bool;
+let
+	(incr,co) = map_red<<fulladd,n>>(true,x,zero);
+tel
+
+function fulladd(ci, x, y: bool) returns (s, co: bool);
+let
+	s = ci xor (x xor y);
+	co = (ci and x) or (x and y) or (y and ci);
+tel
+
+function add (x,y: Int) returns (sum: Int);
+var co: bool;
+let
+	(sum, co) =  map_red<<fulladd,n>>(false,x,y);
+tel
+
+end
+
+-----------------------
+--  instances
+-----------------------
+
+package Int8 is Int(8);
+
+package mainPack
+uses Int8;
+provides
+ node Nat(evt, reset: bool) returns (nat: Int8::Int);
+body
+	node Nat(evt, reset: bool) returns (nat: Int8::Int);
+	let
+		nat = if true -> reset then Int8::zero
+				else if evt then Int8::incr(pre(nat))
+				else pre(nat);
+	tel
+end
+
diff --git a/src/test/should_work/NONREG/PCOND.lus b/src/test/should_work/NONREG/PCOND.lus
new file mode 100644
index 00000000..638d971a
--- /dev/null
+++ b/src/test/should_work/NONREG/PCOND.lus
@@ -0,0 +1,11 @@
+node PCOND( h0:bool; hA,hB,hC:bool when h0;
+A:int when hA; B:int when hB; C:bool when hC;
+                hD:bool when hC; D:bool when hD)
+returns (hX:bool when h0; X:int when hX);
+let
+        hX = hC and current(hD) and ( ( hA and
+current(current(D)) ) or ( hB and not
+current(current(D)) ) );
+        X = ( if ( hA and current(current(D)) )
+then current(A) else current(B) ) when hX;
+tel
diff --git a/src/test/should_work/NONREG/PCOND1.lus b/src/test/should_work/NONREG/PCOND1.lus
new file mode 100644
index 00000000..7c116c25
--- /dev/null
+++ b/src/test/should_work/NONREG/PCOND1.lus
@@ -0,0 +1,7 @@
+node PCOND1( h0:bool; hA,hB,hC:bool when h0;
+A:int when hA; B:int when hB; C:bool when hC;
+                hD:bool when hC; D:bool when hD)
+returns (hX:bool when h0);
+let
+        hX = hC and current(hD) and h0 when h0;
+tel
diff --git a/src/test/should_work/NONREG/SOURIS.lus b/src/test/should_work/NONREG/SOURIS.lus
new file mode 100644
index 00000000..89ed1a1a
--- /dev/null
+++ b/src/test/should_work/NONREG/SOURIS.lus
@@ -0,0 +1,143 @@
+(* Nom de l'etudiant : Emmanuelle IDRAC *)
+(* Nom d'utilisateur : idrac *)
+(* Filiere et Option : MCS *)
+(* Interpretation : B *)
+
+(* Ce programme est en fait le codage d'un automate a 4 etats:
+   
+   - etat0 ou etat initial: on n'a pas recu de clic;
+   - etat1 on a recu un seul clic
+   - etat2 on a recu 2 clics en moins de 5 tops (le double-clic est possible)
+   - etat3 on a recu 2 clics en moins de 7 tops (plus de double-clic possible)
+          
+On utilise un certain nombre de variables, detaillees plus loin, pour :
+   - verifier la validite des transitions entre les etats
+   - afficher les resultats (clics logiques)
+   - garder en memoire certains parametres (date, SIMPLE_2)
+     ex1 : lorsqu'on a B1 T T T T T T B1 T T : simple B1 puis il faut reprendre
+                                              le compte avec count = 2
+     ex2 : B1 T T T T T T B1 B2 B3 : simple1, simple1, simple2, ..
+           est different de 
+           B1 B2 B3 : simple1, simple2, ...
+           car on doit garder en memoire les simples qu'on n'a pas eu le temps
+           "d'afficher"
+          
+*)
+
+node SOURIS (B1:bool; B2:bool; B3:bool; TOP:bool) 
+returns (SIMPLE:bool; DOUBLE:bool; TRIPLE:bool; BOUTON:int);
+var count : int; prev : int ; date :int;
+    SIMPLE_2 : bool ;
+    clic : bool; chgt : bool ; 
+    fin_tps : bool ; fin_tps2 : bool ;
+    etat0 : bool ; etat1 : bool ; etat2 : bool ; etat3 : bool;
+
+
+(* signification des parametres :
+   --> parametres d'entree :
+           -- Bi : vrai des que le bouton i vient d'etre presse.
+           -- TOP: vrai a chaque top d'horloge.
+   --> parametres de sortie :
+           -- SIMPLE: vrai si on a detecte un clic physique "simple"
+           -- DOUBLE: ......................................"double"
+           -- TRIPLE: ......................................"triple"
+           -- BOUTON: si un clic logique a ete detecte, numero du bouton clique
+                      sinon 0.
+  --> parametres internes :
+          -- count : compteur des nombres de tops initialises a 0,1 ou date
+          -- prev : memoire du bouton presse precedent
+          -- date : memoire de la valeur de count au moment du 2nd clic
+
+          -- SIMPLE_2 : vrai lorsque 2 simples clics sont detectes au meme pas
+                        ex : B1 6tops B1 B2 8tops -> simple1,simple1,simple2
+
+         -- clic : vrai si il y a eu un clic et que celui-ci est valide.
+         -- chgt : vrai si on ne clique pas sur le meme bouton que precedement
+
+         -- fin_tps : vrai si le nombre de tops est > 7
+         -- fin_tps2: vrai si le nombre de tops est > 5
+
+         -- etati : booleen representant l'etat du systeme.
+*)
+
+let
+date = 0 -> if ((etat2 or etat3) and pre(etat1)) 
+             then count
+             else pre(date);
+
+chgt = false -> if not clic
+                 then false
+                 else if (B3 and prev = 3) or
+                         (B1 and prev = 1) or
+                         (B2 and prev = 2) or
+                         (prev = 0) or
+                         (not B1 and not B2 and not B3)
+                      then false
+                      else  true ;
+clic = (B1 xor B2 xor B3) and not (B1 and B2 and B3) ;
+prev = 0 -> if pre(B1) then 1
+             else if pre(B2) then 2
+                   else if pre(B3) then 3
+                         else pre(prev);
+
+ 
+fin_tps = false -> if TOP then (pre(count) > 6) else (pre(count) > 7);
+fin_tps2 = false -> if TOP then (pre(count) > 4) else (pre(count) > 5);
+
+count = 0 -> if etat1 and ( pre(etat0) or
+                           (pre(etat1) and chgt) or
+                           (pre(etat2) and chgt) or
+                           (pre(etat3) and chgt))
+              then if TOP then 1
+                          else 0
+              else if etat1 and (pre(etat2) or pre(etat3)) 
+                    then if TOP
+                          then (pre(count) - pre(date) + 1)
+                          else (pre(count) - pre(date))
+                    else if TOP then pre(count) + 1
+                                else pre(count);
+ 
+etat0 = true -> if (pre(etat1) and fin_tps and (not clic)) or
+                   (pre(etat2) and clic and (not chgt) ) or
+                   (pre(etat2) and fin_tps ) or
+                   (pre(etat3) and clic and (not chgt) ) or
+                   (pre(etat0) and (not clic))
+                 then true
+                 else false;
+                  
+etat1 = false -> if (pre(etat0) and  clic) or
+                    (pre(etat2) and chgt) or
+                    (pre(etat3) and (chgt or fin_tps)) or
+                    (pre(etat1) and (not clic) and (not fin_tps))or
+                    (pre(etat1) and chgt)
+                  then true
+                  else false;
+
+etat2 = false -> if (pre(etat1) and  clic and  not fin_tps2 and not chgt) or
+                    (pre(etat2) and not clic and not fin_tps)
+                  then true
+                  else false;
+
+etat3 = false -> if (pre(etat1) and  clic and fin_tps2 and not chgt) or
+                    (pre(etat3) and not clic and not fin_tps)
+                  then true
+                  else false;
+
+BOUTON = 0 -> if ((SIMPLE and not pre(SIMPLE_2)) or DOUBLE or TRIPLE)
+               then prev
+               else if (SIMPLE and pre(SIMPLE_2))
+                     then pre(prev)
+                     else 0;
+ 
+SIMPLE = false -> (pre(etat1) and etat0) or
+                  (pre(etat1) and chgt) or
+                  (pre(etat3) and etat1 and fin_tps) or
+                  (pre(etat3) and etat1 and chgt) or
+                   pre(SIMPLE_2);
+SIMPLE_2 = false -> (pre(etat3) and etat1 and chgt) or
+                    (pre(etat1) and pre(SIMPLE_2) and chgt);
+DOUBLE = false -> (pre(etat2) and chgt) or 
+                  (pre(etat2) and fin_tps);
+TRIPLE = false -> (pre(etat3) and etat0) or (pre(etat2) and not fin_tps and not chgt and etat0); 
+tel
+
diff --git a/src/test/should_work/NONREG/Watch.lus b/src/test/should_work/NONREG/Watch.lus
new file mode 100644
index 00000000..725b5e77
--- /dev/null
+++ b/src/test/should_work/NONREG/Watch.lus
@@ -0,0 +1,554 @@
+
+-- This is  a program implementing a digital watch, with alarm and stopwatch, 
+-- as specified in the document "ESTEREL Programming Examples: Programming a 
+-- digital watch in ESTEREL V2.1" by G. Berry.  Here is the LUSTRE program. 
+-- The external functions, written in C, have been mainly borrowed from the 
+-- ESTEREL implementation.  They will be given later on.
+
+
+-- TYPES
+
+type
+	WATCH_TIME_TYPE,
+	WATCH_TIME_POSITION,
+	STOPWATCH_TIME_TYPE,
+	ALARM_TIME_TYPE,
+	ALARM_TIME_POSITION,
+   DISPLAY_POSITION,
+	MAIN_DISPLAY_TYPE,
+	MINI_DISPLAY_TYPE,
+   STATUS_TYPE,
+   DISPLAY_TYPE,
+	string,
+	LABELS_TYPE;
+
+
+-- EXTERNAL CONSTANTS 
+
+const
+	INITIAL_WATCH_TIME : WATCH_TIME_TYPE;
+	INITIAL_STOPWATCH_TIME : STOPWATCH_TIME_TYPE;
+	INITIAL_ALARM_TIME: ALARM_TIME_TYPE;
+	NULL_POSITION: DISPLAY_POSITION;
+	INITIAL_WATCH_POSITION : WATCH_TIME_POSITION;
+	INITIAL_ALARM_POSITION : ALARM_TIME_POSITION;
+	ALARM_DURATION : int;
+	stringST : string; -- the string "ST"
+	stringAL : string; -- the string "AL"
+
+
+-- EXTERNAL FUNCTIONS
+
+extern function TIME_SCALE (bidon : int)
+	returns (scale : int);
+
+extern function SOMME (i1 : int; i2 : int; i3 : int) returns (somme : int);
+
+extern function COMPARE_WATCH_ALARM_TIME (watch_time: WATCH_TIME_TYPE;
+				   alarm_time: ALARM_TIME_TYPE)
+		returns (result: bool);
+-- returns true iff "watch_time" and "alarm_time" are equal
+
+extern function INCREMENT_WATCH_TIME (time: WATCH_TIME_TYPE) 
+		returns (newtime: WATCH_TIME_TYPE);
+-- returns "new_time" = "time" + 1 second
+
+extern function TOGGLE_24H_IN_WATCH_MODE (time: WATCH_TIME_TYPE) 
+		returns (newtime: WATCH_TIME_TYPE);
+-- changes the 24H/AM-PM status of "time"
+
+extern function INCREMENT_WATCH_TIME_IN_SET_MODE 
+	(time: WATCH_TIME_TYPE; position: WATCH_TIME_POSITION) 
+		returns (new_time: WATCH_TIME_TYPE);
+-- returns "new_time" = "time" + 1 second, with particular restrictions due
+-- to the set mode
+
+extern function SET_WATCH_TIME
+	(time: WATCH_TIME_TYPE; position: WATCH_TIME_POSITION) 
+		returns (new_time: WATCH_TIME_TYPE);
+-- increment the field pointed by "position" in "time"
+
+extern function CONFIRM_TIME (time: WATCH_TIME_TYPE) 
+		returns (new_time: WATCH_TIME_TYPE);
+-- after a manual setting of the watch time, checks it for inconsistencies
+-- of the calendar
+
+extern function NEXT_WATCH_TIME_POSITION
+	(position: WATCH_TIME_POSITION) 
+		returns (new_position: WATCH_TIME_POSITION);
+-- returns the next position after "position"
+
+extern function INCREMENT_STOPWATCH_TIME (time: STOPWATCH_TIME_TYPE) 
+		returns (newtime: STOPWATCH_TIME_TYPE);
+-- returns "new_time" = "time" + 1 time unit (1/100 sec.)
+
+extern function TOGGLE_24H_IN_ALARM_MODE (time: ALARM_TIME_TYPE) 
+		returns (newtime: ALARM_TIME_TYPE);
+-- changes the 24H/AM-PM status of "time"
+
+extern function SET_ALARM_TIME 
+	(time: ALARM_TIME_TYPE; position: ALARM_TIME_POSITION) 
+		returns (new_time: ALARM_TIME_TYPE);
+-- increment the field pointed by "position" in "time"
+
+extern function NEXT_ALARM_TIME_POSITION 
+	(position: ALARM_TIME_POSITION) 
+		returns (new_position: ALARM_TIME_POSITION);
+-- returns the next position after "position"
+
+extern function IS_O_CLOCK (time: WATCH_TIME_TYPE) returns (is_o_clock: bool);
+-- returns true if "time" is on the hour (used for chime)
+
+extern function IS_ZERO_MOD_10_MN (time: STOPWATCH_TIME_TYPE) returns (is_zero: bool);
+-- returns true  if "time" is a multiple of 10 minutes (used for stopwatch beep)
+
+extern function WATCH_TIME_TO_MAIN_DISPLAY
+	(time: WATCH_TIME_TYPE) returns (display: MAIN_DISPLAY_TYPE);
+-- translation of "time" to the main display format
+
+extern function WATCH_TIME_TO_MINI_DISPLAY
+	(time: WATCH_TIME_TYPE) returns (display: MINI_DISPLAY_TYPE);
+-- translation of "time" to the mini display format
+-- (used in ALARM and STOPWATCH modes)
+
+extern function WATCH_DATE_TO_MINI_DISPLAY (time: WATCH_TIME_TYPE)
+         returns (display:MINI_DISPLAY_TYPE);
+-- translation of the date in "time" to the mini display format
+
+extern function WATCH_DAY_TO_ALPHA_DISPLAY
+	(time: WATCH_TIME_TYPE) returns (display: string);
+-- translation of the day of the week in "time" to the alphabetic display format 
+
+extern function WATCH_TO_DISPLAY_POS
+        (wpos: WATCH_TIME_POSITION) returns (dpos: DISPLAY_POSITION);
+-- translation of a watch position to the display format 
+-- (generally nothing to do)
+
+extern function ALARM_TO_DISPLAY_POS
+        (apos: ALARM_TIME_POSITION) returns (dpos: DISPLAY_POSITION);
+-- translation of an alarm position to the display format 
+-- (generally nothing to do)
+
+extern function STOPWATCH_TIME_TO_MAIN_DISPLAY
+	(time: STOPWATCH_TIME_TYPE) 
+		returns (display: MAIN_DISPLAY_TYPE);
+-- translation of "time" to the main display format
+
+extern function ALARM_TIME_TO_MAIN_DISPLAY 
+	(time: ALARM_TIME_TYPE) returns (display: MAIN_DISPLAY_TYPE);
+-- translation of "time" to the main display format
+
+extern function MAKE_DISPLAY
+		(main: MAIN_DISPLAY_TYPE;
+		mini: MINI_DISPLAY_TYPE;
+		alpha: string;
+		status: STATUS_TYPE;
+		enhanced: DISPLAY_POSITION;
+		labels: LABELS_TYPE) returns (display: DISPLAY_TYPE);
+
+extern function STATUS
+	(alarm_is_set, chime_is_set,
+	stopwatch_running, stopwatch_lapping: bool)returns
+	(status: STATUS_TYPE);
+
+extern function LABELS
+	(mode_is_watch, mode_is_stopwatch, mode_is_alarm,
+	 mode_is_set_watch, mode_is_set_alarm:bool)
+	returns (labels: LABELS_TYPE);
+
+
+node WATCH (second, -- second
+	-- the alarm begins to ring when it is set and the alarm time
+	-- equals the watch time.
+            toggle_24h, -- toggle the 24h/AM-PM mode
+            toggle_chime,
+            in_set, -- is the watch in set mode
+            next_position, -- change the position set in set mode
+            set: bool -- increment the position to be set
+            )
+            returns 
+            (time: WATCH_TIME_TYPE; -- the time
+             enhance: WATCH_TIME_POSITION; -- the position to be enhanced
+             chime_is_set : bool;
+             beep : int
+            );
+	-- the watch has a mode (standard or set), it receives the second, 
+	-- and has three buttons: a button to change the 24H/AM-PM status,
+	-- a button to change the position to be enhanced and manually set, 
+	-- and a button to set (generally increment) this position
+
+var position_set: WATCH_TIME_POSITION; -- the position to be set
+    internal_chime_is_set: int; --TRICHE (pour faire comme esterel)
+let
+  internal_chime_is_set = 
+        0 -> if (toggle_chime) then (if (pre (internal_chime_is_set)) = 0 then 1 else 0) 
+                      else pre(internal_chime_is_set);
+-- (ancienne definition :)
+-- chime_is_set = TWO_STATES(false, toggle_chime, toggle_chime); 
+
+  chime_is_set = (internal_chime_is_set = 1);
+
+  beep = if second then
+         (if (IS_O_CLOCK(time) and (chime_is_set)) then 2 else 0)
+         else 0;
+
+  time = INITIAL_WATCH_TIME ->
+             if not in_set then
+		-- in standard watch mode, the time is incremented at any
+		-- second, and the 24H/AM-PM status is changed on the
+		-- event "toggle_24h. When returning from a manual setting,
+		-- the time must be checked for inconsistencies.
+                if second then INCREMENT_WATCH_TIME(pre(time))
+                else if toggle_24h then TOGGLE_24H_IN_WATCH_MODE(pre(time))
+		else if EDGE(not in_set) then CONFIRM_TIME(pre(time))
+                else pre(time)
+             else
+		-- in set watch mode, a special procedure is applied to
+		-- increment the time. Moreover, the time is changed 
+		-- manually by any "set" command
+                if second then INCREMENT_WATCH_TIME_IN_SET_MODE(pre(time), position_set)
+                else if set then SET_WATCH_TIME(pre(time), position_set)
+                else (pre(time));
+
+	-- the position to be enhanced and set is initialized whenever
+	-- the set watch mode is entered, and changed manually by any
+	-- "next position" command
+  enhance = position_set ;
+  position_set = if true -> EDGE(in_set) then INITIAL_WATCH_POSITION
+		 else if next_position then NEXT_WATCH_TIME_POSITION(pre(position_set))
+		 else pre(position_set);
+tel
+
+
+node STOPWATCH(hs,-- the 1/100 second, or more generally, the time unit
+              start_stop,lap:bool)
+              returns
+              (time:STOPWATCH_TIME_TYPE; -- the time to be displayed
+               run_state, -- true if the stop-watch is running
+               lap_state : bool; -- true if the display is frozen
+	       beep : int
+               );
+-- the stopwatch has two buttons: the start-stop button, and the lap-reset 
+-- button. It outputs the stopwatch time, the components of its state,
+-- and its own beeper command since it depends on the stopwatch internal time.
+
+var reset,must_beep:bool; -- true if the time is reset
+    internal_time: STOPWATCH_TIME_TYPE;
+let
+	-- the lap-reset button is interpreted as a "reset" when the stopwatch
+	-- is neither in lap state not in run state
+  reset = false -> lap and pre(not run_state and not lap_state);
+	-- the stopwatch is initially stopped. Its start-stop state changes
+	-- whenever the start-stop button is pushed
+  run_state = TWO_STATES(false,start_stop,start_stop);
+	-- the stopwatch is initially not in lap state. This state is entered
+	-- whenever the lap button is pushed in run state, and leaved as soon
+	-- as this button is pushed again
+  lap_state = TWO_STATES(false,lap and run_state ,lap);
+	-- the stopwatch displayed time is always equal to the value of the
+	-- internal time at the last instant when the stopwatch was not in
+	-- lap state
+  time = current (internal_time when lap_state);
+  internal_time = if true -> reset then INITIAL_STOPWATCH_TIME
+                  else if run_state and hs then INCREMENT_STOPWATCH_TIME(pre(internal_time))
+		  else pre(internal_time);
+	-- the stopwatch must beep whenever the start-stop button is pushed
+	-- and whenever the internal time reaches a multiple of 10mn (actually
+	-- 1mn, for simulation purpose
+-- must_beep = start_stop or (IS_ZERO_MOD_10_MN(internal_time) and run_state);
+-- beep = if EDGE(must_beep) then 1 else 0;
+   must_beep = if start_stop then true
+               else if (hs and run_state) then IS_ZERO_MOD_10_MN(internal_time)
+               else false;
+   beep = if must_beep then 1 else 0;
+tel
+
+
+node ALARM (toggle_24h, --change the 24h or AM/PM mode 
+             toggle_alarm, --change the status "alarm set" 
+             in_set, --  true when the mode is "Set Alarm" 
+             set, --increment the position set in set mode 
+             next_position, --change the position set 
+             stop_beep,
+             second : bool; 
+             watch_time: WATCH_TIME_TYPE) 
+     	returns (time: ALARM_TIME_TYPE; -- the alarm time 
+                 status:bool; -- alarm set 
+                 enhance: ALARM_TIME_POSITION; -- the position to be enhanced 
+                 beep : int); -- the alarm has a mode (standard or set),
+-- and four buttons: a button to change the 24H/AM-PM status,
+-- a button to set or reset the alarm,
+-- a button to change the position to be enhanced and manually set, 
+-- and a button to set (generally increment) this position
+
+var position_set: ALARM_TIME_POSITION;
+    start_beeping : bool;
+    time_out : bool;
+    count, internal_status : int;
+let
+	-- the 24H/AM-PM component of the time is changed by any "toggle_24h"
+	-- command. Otherwis, the alarm time is only changed by the 
+	-- "set" command
+
+  start_beeping = COMPARE_WATCH_ALARM_TIME(watch_time,time) and status;
+  status = (internal_status = 1);
+  internal_status = 0 -> if toggle_alarm then 
+                (if ((pre internal_status) = 0) then 1 else 0)
+                else if(EDGE(not in_set)and((pre internal_status) = 0)) then 1
+                else pre internal_status;
+  count = 0 -> if(start_beeping) then ALARM_DURATION
+          else if (((pre count)<>0)and(second)) then pre count - 1
+          else (0 -> pre count);
+  time_out = false -> (pre count <> 0) and (count = 0);
+
+  beep = if (TWO_STATES(false,start_beeping,stop_beep or time_out)and second)
+         then 4
+         else 0;
+
+  time = INITIAL_ALARM_TIME ->
+              if toggle_24h  then TOGGLE_24H_IN_ALARM_MODE(pre(time))
+              else if set then SET_ALARM_TIME(pre(time), position_set)
+              else pre(time);
+	-- the position to be enhanced and set is initialized whenever
+	-- the set alarm mode is entered, and changed manually by any
+	-- "next position" command
+  enhance =  position_set;
+  position_set = if true -> EDGE(in_set) then INITIAL_ALARM_POSITION
+                 else if next_position then NEXT_ALARM_TIME_POSITION( pre(position_set))
+		 else pre(position_set);
+	-- the alarm is initially not set. It is automatically set when leaving
+	-- the set mode. Otherwise, its status is changed manually by any 
+	-- toggle_alarm command
+tel
+
+
+
+-- BUTTONS computes the various modes and switches required by the
+-- main functions of the wristwatch.  The four inputs are the four
+-- buttons actually found on the wristwatch.
+
+node BUTTONS (UL,LL,UR,LR: bool)
+     returns (mode_is_watch,		-- the display shows the watch
+	      mode_is_stopwatch,	-- the display shows the stopwatch
+	      mode_is_alarm,		-- the display shows the alarm
+              mode_is_set_watch,	-- the watch is in set mode
+	      mode_is_set_alarm,	-- the alarm is in set mode
+
+              toggle_24h,	-- the status '24H/AM-PM' must change
+	      toggle_chime,	-- the status of the chime must change
+	      toggle_alarm,	-- the status of the alarm must change
+
+              next_watch_time_position, -- the position in the watch
+                                        -- which can be set must change
+	      next_alarm_position,	-- the position in the alarm time
+                                  	-- which can be set must change
+              set_watch,		-- the current position of 
+					-- the watch must be set
+	      set_alarm,		-- the current position of 
+					-- the alarm time must be set
+
+              start_stop,	-- the start-stop event of the stopwatch
+	      lap,		-- the lap-reset event of the stopwatch
+
+	      stop_alarm_beep	-- the manual stop of the alarm beep
+	     	 : bool);
+
+var 
+    mode_is_standard_watch:bool;
+    mode_is_standard_alarm:bool;
+
+let
+  mode_is_watch =
+  true ->
+	 if LL then
+	    if pre mode_is_watch then pre mode_is_set_watch 
+	    else if pre mode_is_stopwatch then false
+	    else not pre mode_is_set_alarm 
+	 else pre mode_is_watch;
+  mode_is_stopwatch = 
+  false ->
+	 if LL then
+	    if pre mode_is_watch then not pre mode_is_set_watch else false
+	 else pre mode_is_stopwatch;
+  mode_is_alarm = 
+  false ->
+	 if LL then
+	    if pre mode_is_watch then false
+	    else if pre mode_is_stopwatch then true
+	    else pre mode_is_set_alarm 
+	 else pre mode_is_alarm;
+
+  mode_is_set_watch = if mode_is_watch then
+			if UL then (false -> not pre mode_is_set_watch)
+			else (false -> pre mode_is_set_watch)
+		      else false;
+  mode_is_set_alarm = if mode_is_alarm then
+			if UL then not pre mode_is_set_alarm
+			else pre mode_is_set_alarm
+		      else false;
+
+  mode_is_standard_watch = mode_is_watch and not mode_is_set_watch;
+  mode_is_standard_alarm = mode_is_alarm and not mode_is_set_alarm;
+
+  toggle_24h = LR and mode_is_standard_watch;
+  toggle_chime = LR and mode_is_standard_alarm;
+  toggle_alarm = UR and mode_is_standard_alarm;
+
+  next_watch_time_position = LL and mode_is_set_watch;
+  next_alarm_position = LL and mode_is_set_alarm;
+  set_watch = LR and mode_is_set_watch;
+  set_alarm = LR and mode_is_set_alarm;
+
+  start_stop = LR and mode_is_stopwatch;
+  lap = UR and mode_is_stopwatch;
+
+  -- in any mode, the UR button stops the alarm beep
+  stop_alarm_beep = UR;
+tel
+
+node DISPLAY(mode_is_watch, mode_is_stopwatch, mode_is_alarm:bool;
+      watch_time:WATCH_TIME_TYPE;
+      stopwatch_time: STOPWATCH_TIME_TYPE;
+      alarm_time: ALARM_TIME_TYPE; 
+      position_enhanced: DISPLAY_POSITION;
+      status: STATUS_TYPE;
+      labels: LABELS_TYPE)
+   returns
+      (display: DISPLAY_TYPE);
+var main_display:MAIN_DISPLAY_TYPE; 
+    mini_display:MINI_DISPLAY_TYPE;
+    alpha_display:string;
+let
+  display = MAKE_DISPLAY(main_display,mini_display,
+			alpha_display, status, 
+			position_enhanced,labels);
+  (main_display,mini_display,alpha_display) =
+    if mode_is_watch then
+	-- in watch mode, the main display shows the watch time, the mini
+	-- display shows the date, and the alphabetic display shows the
+	-- day of the week
+       (WATCH_TIME_TO_MAIN_DISPLAY(watch_time),
+        WATCH_DATE_TO_MINI_DISPLAY(watch_time),
+        WATCH_DAY_TO_ALPHA_DISPLAY(watch_time))
+    else if mode_is_stopwatch then
+	-- in stopwatch mode, the main display shows the stopwatch time,
+	-- the minidisplay shows the watch time, and the string 'ST' is 
+	-- displayed on the alphabetic display
+       (STOPWATCH_TIME_TO_MAIN_DISPLAY(stopwatch_time),
+        WATCH_TIME_TO_MINI_DISPLAY(watch_time),
+	stringST)
+    else
+	-- in alarm mode, the main display shows the alarm time,
+	-- the minidisplay shows the watch time, and the string 'AL' is 
+	-- displayed on the alphabetic display
+       (ALARM_TIME_TO_MAIN_DISPLAY(alarm_time),
+        WATCH_TIME_TO_MINI_DISPLAY(watch_time),
+	stringAL);
+tel
+      
+--UTILITAIRES
+
+node TWO_STATES(init,set,reset: bool) returns (state: bool);
+-- implements a flip-flop, with initial state "init". The state changes from 
+-- 'false' to 'true' whenever the input "set" is true, and from 'true' to 
+-- 'false' -- whenever the input "reset" is true. 
+-- These two inputs are not exclusive.
+let
+  state = init ->
+               if set and not pre(state) then true
+               else if reset and pre(state) then false
+               else pre(state);
+tel
+
+node EDGE(b:bool) returns (edge:bool);
+-- returns 'true' whenever the value of its parameter rises to 'true'
+let edge = b -> (b and not pre(b)); tel
+
+node MORE_RECENT(evt:bool; delay:int) returns (more_recent:bool);
+-- returns true whenever the last occurrence of "evt" is more recent
+-- than "delay" (assumed to be >0 )
+var deadline: int; -- will count the delay from the last occurrence of evt
+let
+   (more_recent, deadline) =
+	if evt then (true, 0) else (false, delay) ->
+		if evt then (true,0)
+		else if pre(more_recent) then (deadline<delay, pre(deadline)+1)
+		else (false, pre(deadline));
+tel
+
+node DIVIDE (scale:int)
+            returns (quotient: bool);
+-- the result is true once every "scale" cycles of the node
+var n:int;
+let
+   (n,quotient) = (0,true)  -> (if (pre(n) + 1)  = scale then (0,true) 
+                                else (pre(n)+1,false));
+tel
+
+
+node Watch (UPLEFT,LOWLEFT,UPRIGHT,LOWRIGHT,time_unit:bool)
+               returns (display:DISPLAY_TYPE;
+			beep:int
+			);
+var
+  watch_time: WATCH_TIME_TYPE;
+  watch_position_enhanced: WATCH_TIME_POSITION; 
+  alarm_time: ALARM_TIME_TYPE;
+  alarm_position_enhanced: ALARM_TIME_POSITION; 
+  stopwatch_time: STOPWATCH_TIME_TYPE;
+  position_enhanced: DISPLAY_POSITION;
+  status: STATUS_TYPE;
+  labels: LABELS_TYPE;
+  alarm_is_set, mode_is_watch, mode_is_stopwatch, mode_is_alarm,
+  stopwatch_running, stopwatch_lapping, chime_is_set,
+  toggle_24h, toggle_chime, toggle_alarm, watch_next_position,
+  alarm_next_position, set_watch, set_alarm, mode_is_set_watch,
+  mode_is_set_alarm, start_stop, lap, stop_alarm_beep, second: bool; 
+  alarm_beep, chime_beep, stopwatch_beep : int;
+
+let
+  --assert #(UPLEFT,LOWLEFT,UPRIGHT,LOWRIGHT,time_unit);
+  display = DISPLAY(mode_is_watch,mode_is_stopwatch,mode_is_alarm,
+			watch_time,stopwatch_time, alarm_time, 
+			position_enhanced,status,labels);
+		-- builds the display
+
+  beep = SOMME(alarm_beep,chime_beep,stopwatch_beep);
+
+  (alarm_time,alarm_is_set,alarm_position_enhanced,alarm_beep) =
+          ALARM(toggle_24h,toggle_alarm,mode_is_set_alarm,
+                        set_alarm,alarm_next_position,stop_alarm_beep,second,watch_time);
+
+
+  labels =     -- the button labels
+	LABELS(mode_is_watch,mode_is_stopwatch,
+	mode_is_alarm, mode_is_set_watch, mode_is_set_alarm);
+
+  position_enhanced =   -- the position to be enhanced
+	if mode_is_set_watch then WATCH_TO_DISPLAY_POS(watch_position_enhanced)
+	else if mode_is_set_alarm then ALARM_TO_DISPLAY_POS(alarm_position_enhanced)
+	else NULL_POSITION;
+
+  status =   	-- the status indicators appearing on the screen
+        STATUS(alarm_is_set, chime_is_set, 
+	stopwatch_running, stopwatch_lapping);
+
+  (watch_time, watch_position_enhanced,chime_is_set,chime_beep) =
+          WATCH(second,toggle_24h,toggle_chime,mode_is_set_watch,
+                          watch_next_position,set_watch);
+
+  (stopwatch_time, stopwatch_running, stopwatch_lapping, stopwatch_beep) =
+          STOPWATCH(time_unit, start_stop,lap);
+
+  (mode_is_watch, mode_is_stopwatch, mode_is_alarm,
+   mode_is_set_watch, mode_is_set_alarm,
+   toggle_24h, toggle_chime, toggle_alarm,
+   watch_next_position, alarm_next_position,
+   set_watch, set_alarm,
+   start_stop, lap, stop_alarm_beep) = BUTTONS(UPLEFT,LOWLEFT,UPRIGHT,LOWRIGHT);
+
+   second = time_unit and (current(DIVIDE(TIME_SCALE(0) when time_unit)));--(true->time_unit))));
+		-- converts the time unit (assumed to be the 1/TIME_SCALE(0)
+		-- sec.) into the second
+tel
+
diff --git a/src/test/should_work/NONREG/X.lus b/src/test/should_work/NONREG/X.lus
new file mode 100644
index 00000000..948a2650
--- /dev/null
+++ b/src/test/should_work/NONREG/X.lus
@@ -0,0 +1,8 @@
+node X (c: bool; n:int when c)
+returns (d: bool; m: int when c; p:int when d);
+let
+  m = 0 when c -> pre(m) + n;
+  d = c and (current(m)<=10);
+  p = 0 when d -> pre(p) + 1 when d;
+tel
+
diff --git a/src/test/should_work/NONREG/X1.lus b/src/test/should_work/NONREG/X1.lus
new file mode 100644
index 00000000..e3f289bd
--- /dev/null
+++ b/src/test/should_work/NONREG/X1.lus
@@ -0,0 +1,6 @@
+node X1 (b: bool; n: int)
+returns (m: int);
+let
+  m = current(n when b);
+tel
+
diff --git a/src/test/should_work/NONREG/X2.lus b/src/test/should_work/NONREG/X2.lus
new file mode 100644
index 00000000..7c5153f4
--- /dev/null
+++ b/src/test/should_work/NONREG/X2.lus
@@ -0,0 +1,6 @@
+node X2 (b: bool; n: int)
+returns (m: int);
+let
+  m = 0 -> current(n when b);
+tel
+
diff --git a/src/test/should_work/NONREG/X3.lus b/src/test/should_work/NONREG/X3.lus
new file mode 100644
index 00000000..c9f9ee32
--- /dev/null
+++ b/src/test/should_work/NONREG/X3.lus
@@ -0,0 +1,16 @@
+
+node X3(n:int; b: bool)
+returns (m: int);
+var c: bool when b;
+    d: bool when c;
+	p,u : int when b;
+	q,r: int when c;
+let
+	c = (p>=(0 when b)) ;
+	p = n when b;
+	q = p when c;
+	d = q <=((10 when b) when c);
+	r = current(q when d);
+	u = current(r);
+	m = current(u);
+tel
diff --git a/src/test/should_work/NONREG/X6.lus b/src/test/should_work/NONREG/X6.lus
new file mode 100644
index 00000000..aaadd238
--- /dev/null
+++ b/src/test/should_work/NONREG/X6.lus
@@ -0,0 +1,17 @@
+
+node X6(n:int; b: bool)
+returns 
+	(m: int;
+	 c: bool when b;
+    d: bool when c;
+	p,u : int when b;
+	q,r: int when c);
+let
+	c = (p>=(0 when b)) ;
+	p = n when b;
+	q = p when c;
+	d = q <=((10 when b) when c);
+	r = current(q when d);
+	u = current(r);
+	m = current(u);
+tel
diff --git a/src/test/should_work/NONREG/_N_uu.lus b/src/test/should_work/NONREG/_N_uu.lus
new file mode 100644
index 00000000..dbbece78
--- /dev/null
+++ b/src/test/should_work/NONREG/_N_uu.lus
@@ -0,0 +1,63 @@
+-- file `uu.xec' generated by silus
+
+-- types aliases and constantes declarations
+
+-- operators 
+node _N_uu(
+  I_x : bool;
+  I_y : bool;
+  I_z : bool;
+ ) returns ( 
+  O_a : bool;
+ );
+var
+  V_V135_A_forbiden : bool;
+  V_V111_X : bool;
+  V_V112_X : bool;
+  V_V136_B_forbiden : bool;
+  V_V118_X : bool;
+  V_V125_X : bool;
+  V_V119_X : bool;
+  V_V126_X : bool;
+let
+   O_a = ( not((V_V111_X and V_V135_A_forbiden)) and  not((V_V125_X and V_V136_B_forbiden)));
+   V_V112_X = (false ->  pre((I_y or V_V112_X)));
+   V_V111_X = 
+		if (I_y)
+		      then (I_x)
+		      else (
+		if (V_V112_X)
+		        then ((I_x or  pre(V_V111_X)))
+		        else (true));
+   V_V119_X = (false ->  pre((I_y or V_V119_X)));
+   V_V118_X = 
+		if (I_y)
+		      then (I_x)
+		      else (
+		if (V_V119_X)
+		        then ((I_x and  pre(V_V118_X)))
+		        else (true));
+   V_V126_X = (false ->  pre((V_V118_X or V_V126_X)));
+   V_V125_X = 
+		if (V_V118_X)
+		      then (I_z)
+		      else (
+		if (V_V126_X)
+		        then ((I_z or  pre(V_V125_X)))
+		        else (true));
+   V_V135_A_forbiden = (false -> 
+		if (( pre(V_V111_X) and  not(V_V111_X)))
+		      then (true)
+		      else (
+		if (( pre(V_V125_X) and  not(V_V125_X)))
+		        then (false)
+		        else ( pre(V_V135_A_forbiden))));
+   V_V136_B_forbiden = (true -> 
+		if (( pre(V_V125_X) and  not(V_V125_X)))
+		      then (true)
+		      else (
+		if (( pre(V_V111_X) and  not(V_V111_X)))
+		        then (false)
+		        else ( pre(V_V136_B_forbiden))));
+tel
+
diff --git a/src/test/should_work/NONREG/activation_ec.lus b/src/test/should_work/NONREG/activation_ec.lus
new file mode 100644
index 00000000..dc2b318c
--- /dev/null
+++ b/src/test/should_work/NONREG/activation_ec.lus
@@ -0,0 +1,21 @@
+node activation_ec
+  (evt: bool)
+returns
+  (scie: int);
+
+var
+  V10_go_up: bool;
+
+let
+  scie = (0 -> (if evt
+  						then (if V10_go_up 	then ((pre scie) + 1)
+  													else ((pre scie) - 1))
+						else (pre scie)));
+  V10_go_up =
+		(true -> (if ((pre scie) >= 5)
+						then false
+						else (if ((pre scie) <= 0)
+							  then true
+							  else (pre V10_go_up))));
+tel
+
diff --git a/src/test/should_work/NONREG/after.lus b/src/test/should_work/NONREG/after.lus
new file mode 100644
index 00000000..ecd30fbc
--- /dev/null
+++ b/src/test/should_work/NONREG/after.lus
@@ -0,0 +1,4 @@
+node after(x: bool) returns (after: bool);
+let
+   after = x or (false->pre(after));
+tel
diff --git a/src/test/should_work/NONREG/alarme.lus b/src/test/should_work/NONREG/alarme.lus
new file mode 100644
index 00000000..9e61cb62
--- /dev/null
+++ b/src/test/should_work/NONREG/alarme.lus
@@ -0,0 +1,61 @@
+const delai_vigilence = 3 ;
+      delai_reprise = 4 ;
+      delai_alarme = 6 ;
+
+node edge (in : bool) returns (edge : bool);
+let
+  edge = false -> in and not pre(in);
+tel
+
+node bascule (init, set, reset : bool) returns (etat : bool);
+let
+  etat = init -> if set and not pre(etat) then true
+		 else if reset and pre(etat) then false
+		 else pre(etat);
+tel
+
+node decompte (init :bool; val_init : int ; decr :bool) returns (n : int);
+let
+  n = 0 -> if init then val_init
+	   else if decr then pre(n) - 1 else pre(n);
+tel
+
+node alarme (MA, code, pb_hab, pb_tmp : bool)
+	    returns
+	    (alarme : bool; en_marche:bool);
+
+var demande_entree : bool;
+    vigilence_partielle : bool;
+    reprise : bool;
+    tps_vigilence, tps_reprise, tps_alarme : int;
+
+let
+  	assert #(MA, code);
+	--assert #(2);
+	
+  en_marche = bascule (false, MA, MA and pre(demande_entree));
+  demande_entree = bascule (false, code, pre(tps_vigilence)=0);
+  vigilence_partielle = bascule (false,
+				edge(en_marche) or edge(demande_entree),
+				pre(tps_vigilence)=0);
+  tps_vigilence = decompte (edge(en_marche) or edge(demande_entree),
+		            delai_vigilence,
+		            en_marche and pre(tps_vigilence)>0);
+  tps_alarme = decompte (edge(alarme), delai_alarme,
+                         pre(alarme) and pre(tps_alarme)>0);
+  reprise = bascule (false,
+		    pre(alarme) and pre(tps_alarme)=0,
+		    pre(tps_reprise)=0);
+  tps_reprise = decompte (edge(reprise), delai_reprise,
+			  pre(reprise) and pre(tps_reprise>0));
+  alarme = false ->
+	    if en_marche and not reprise and
+	       (pb_hab
+	       or
+	       (pb_tmp and not vigilence_partielle))
+            then true
+	    else if pre(alarme) and
+		    (pre(tps_alarme)=0 or edge(not en_marche))
+                 then false
+		 else pre(alarme);
+tel
diff --git a/src/test/should_work/NONREG/arbitre.lus b/src/test/should_work/NONREG/arbitre.lus
new file mode 100644
index 00000000..358b105c
--- /dev/null
+++ b/src/test/should_work/NONREG/arbitre.lus
@@ -0,0 +1,54 @@
+--include "INCL/stdincl.lus"
+--include "INCL/observers.lus"
+
+extern node xedge(x: bool) returns (y: bool);
+
+node my_switch (set,reset,initial:bool) returns (level:bool);
+let
+  level = initial -> if set and not pre(level) then true
+		     else if reset and pre(level) then false
+                          else pre(level);
+tel
+
+-- partie arbitrage attachee a chaque processus
+-- la ressource est accorde au processus (grant)
+--     s'il la demande (request) quand il recoit le jeton (token)
+--     et redevient libre lorsqu'il arrete de l'utiliser
+-- le jeton est passe (new_token)
+--            s'il avait ete recu au pas precedent et que
+--            le processus ne demande pas la ressource
+--            ou si le processus arrete d'utiliser la ressource
+
+node process (request, token:bool) returns (grant, new_token:bool);
+let
+  grant = my_switch (token and request, not request, token and request);
+  new_token = false -> (pre(token) and not request) or xedge(not grant);
+tel
+
+-- arbitre pour quatre processus organises en anneau 
+
+node mutex (req0, req1, req2, req3 : bool)
+	   returns (grant0, grant1, grant2, grant3 : bool);
+var token0, token1, token2, token3 : bool;
+    new_token0, new_token1, new_token2, new_token3 : bool;
+let
+  (grant0, new_token0) = process (req0, token0);
+  (grant1, new_token1) = process (req1, token1);
+  (grant2, new_token2) = process (req2, token2);
+  (grant3, new_token3) = process (req3, token3);
+  token0 = true -> pre new_token3;
+  token1 = false -> pre new_token0;
+  token2 = false -> pre new_token1;
+  token3 = false -> pre new_token2;
+tel
+
+-- verification de l'exclusion mutuelle
+
+node arbitre (req0, req1, req2, req3 : bool) returns (ok : bool);
+var gr0, gr1, gr2, gr3 : bool;
+let
+  (gr0, gr1, gr2, gr3) = mutex (req0, req1, req2, req3);
+  -- un processus au plus peut utiliser la ressource
+  ok =  #(gr0, gr1, gr2, gr3);
+tel
+
diff --git a/src/test/should_work/NONREG/argos.lus b/src/test/should_work/NONREG/argos.lus
new file mode 100644
index 00000000..4c7f17d5
--- /dev/null
+++ b/src/test/should_work/NONREG/argos.lus
@@ -0,0 +1,11 @@
+node argos(a,b:bool) returns (s0,s1,s2:bool);
+var t0,t1,x,y:bool;
+let
+	s0 = true -> pre(s0 and not a);
+	s1 = false ->pre(s1 or (s0 and a and x));
+	s2 = false ->pre(s2 or (s0 and a and not x));
+	y = s0 and a;
+	t0 = true -> pre((t0 and not b) or (t1 and b));
+	t1 = false -> pre((t1 and not b) or (t0 and b));
+	x = t0 and y;
+tel
diff --git a/src/test/should_work/NONREG/assertion.lus b/src/test/should_work/NONREG/assertion.lus
new file mode 100644
index 00000000..6e51b1b7
--- /dev/null
+++ b/src/test/should_work/NONREG/assertion.lus
@@ -0,0 +1,10 @@
+
+node assertion(a:bool; b:bool; c:bool; d:bool)
+returns (ok: bool);
+let
+	assert #(a);
+	assert #(a,b);
+	assert #(a,b,c);
+	assert #(a,b,c,d);
+	ok = true;
+tel
diff --git a/src/test/should_work/NONREG/aux.lus b/src/test/should_work/NONREG/aux.lus
new file mode 100644
index 00000000..12acb404
--- /dev/null
+++ b/src/test/should_work/NONREG/aux.lus
@@ -0,0 +1,5 @@
+node aux(ck: bool)
+returns (x: int);
+let
+	x = pre(x) +1;
+tel
diff --git a/src/test/should_work/NONREG/aux1.lus b/src/test/should_work/NONREG/aux1.lus
new file mode 100644
index 00000000..b9f46ac3
--- /dev/null
+++ b/src/test/should_work/NONREG/aux1.lus
@@ -0,0 +1,5 @@
+node aux1(a,b:int) returns (c,d:int);
+let
+  (c,d) = if(a>0) then pre(a,b)
+			else (pre(a)+1, pre(b)+1);
+tel
diff --git a/src/test/should_work/NONREG/bascule.lus b/src/test/should_work/NONREG/bascule.lus
new file mode 100644
index 00000000..a01f2c11
--- /dev/null
+++ b/src/test/should_work/NONREG/bascule.lus
@@ -0,0 +1,6 @@
+node bascule (r,s:bool) returns (q,n:bool);
+let
+  q = (true) -> ((not(pre(r))) and (not(pre(n))));
+  n = (false) -> ((not(pre(s))) and (not(pre(q))));
+--  assert #(r,s);
+tel
diff --git a/src/test/should_work/NONREG/call.lus b/src/test/should_work/NONREG/call.lus
new file mode 100644
index 00000000..94692ee5
--- /dev/null
+++ b/src/test/should_work/NONREG/call.lus
@@ -0,0 +1,14 @@
+extern function f(a: int) returns (b: int);
+extern function p(a: int) returns (x,y: int);
+
+node n(a: int; b: bool) returns (x, y: int);
+let
+	(x,y) = if b then (f(a),0) else (0,a);
+tel
+
+node call (a: int; b: bool) returns (x, y: int);
+var u,v: int;
+let
+	(u,v) = p(a);
+	(x,y) = n(a,b);
+tel
diff --git a/src/test/should_work/NONREG/ck2.lus b/src/test/should_work/NONREG/ck2.lus
new file mode 100644
index 00000000..7563fa1b
--- /dev/null
+++ b/src/test/should_work/NONREG/ck2.lus
@@ -0,0 +1,6 @@
+
+node ck2 (c: bool; d: bool when c ; e: int when d)
+returns (n: int);
+let
+  n = if c and current(d) then 0 else current(current(e));
+tel
diff --git a/src/test/should_work/NONREG/ck3.lus b/src/test/should_work/NONREG/ck3.lus
new file mode 100644
index 00000000..eb95d0e5
--- /dev/null
+++ b/src/test/should_work/NONREG/ck3.lus
@@ -0,0 +1,5 @@
+node ck3 (a: bool; b: bool when a; c: bool when b)
+returns (x: bool);
+let
+  x = current(current(c));
+tel
diff --git a/src/test/should_work/NONREG/ck4.lus b/src/test/should_work/NONREG/ck4.lus
new file mode 100644
index 00000000..70d7f2ac
--- /dev/null
+++ b/src/test/should_work/NONREG/ck4.lus
@@ -0,0 +1,5 @@
+node ck4 (a: int when b; b: bool)
+returns (c: int);
+let
+  c = current(a);
+tel
diff --git a/src/test/should_work/NONREG/ck5.lus b/src/test/should_work/NONREG/ck5.lus
new file mode 100644
index 00000000..8f27f6c7
--- /dev/null
+++ b/src/test/should_work/NONREG/ck5.lus
@@ -0,0 +1,10 @@
+node ck5 (b,c: bool) returns (e: bool);
+let
+	e = current edge(b when c);
+tel
+
+node edge(x:bool) returns (y: bool);
+let
+  y = false -> x and not pre(x);
+tel
+
diff --git a/src/test/should_work/NONREG/ck6.lus b/src/test/should_work/NONREG/ck6.lus
new file mode 100644
index 00000000..7ec38b23
--- /dev/null
+++ b/src/test/should_work/NONREG/ck6.lus
@@ -0,0 +1,22 @@
+node ck6(b,c: bool; n,m: int)
+returns (k,l: int);
+var u,v,w: int when b;
+	x: int when cc;
+	cc: bool when b;
+let
+	(u,v) = p(n when b);
+	(w,x) = N(cc, u, v);
+	cc = c when b;
+	k = current(w);
+	l = current(current(x));
+tel
+
+
+node N(a: bool; m,n:int)
+returns(q:int; r: int when a);
+let
+	q = m+n;
+	r = q when a;
+tel
+
+extern function p(d:int) returns (e,f:int);
diff --git a/src/test/should_work/NONREG/ck7.lus b/src/test/should_work/NONREG/ck7.lus
new file mode 100644
index 00000000..7cee30e1
--- /dev/null
+++ b/src/test/should_work/NONREG/ck7.lus
@@ -0,0 +1,6 @@
+node ck7(a: bool; m,n:int)
+returns(q:int; r: int when a);
+let
+	q = m+n;
+	r = q when a;
+tel
diff --git a/src/test/should_work/NONREG/clock.lus b/src/test/should_work/NONREG/clock.lus
new file mode 100644
index 00000000..b37fc712
--- /dev/null
+++ b/src/test/should_work/NONREG/clock.lus
@@ -0,0 +1,24 @@
+node clock(in: bool) returns (ok: bool);
+	var
+		v1 : bool ;
+		v2 : bool when v4 ;
+		v3 : bool when v1 ;
+		v4 : bool ;
+		v5 : bool when v4 ;
+		v6 : bool when v5;
+		v7 : bool when v6;
+	let 
+		v1 = inOnIn(in, true when in);
+		-- v2 = inOnOut(in, true when v1);
+		v2 = in when v4;
+		v3 = outOnIn(in, v1);
+		v4, v5 = outOnOut(pre v4, pre v4);
+	   v6, v7 = all(v4, v5);
+		ok = boolred<<3; 3; 7>>([ v1, current v2, current v3, v4, current v5, current current v6, current current current v7 ]);
+	tel
+
+extern node inOnIn( a : bool; b : bool when a ) returns (c : bool);
+extern node inOnOut( a : bool; b : bool when c ) returns (c : bool);
+extern node outOnIn( a : bool; b : bool) returns (c : bool when b);
+extern node outOnOut( a : bool; b : bool) returns (c : bool; d : bool when c);
+extern node all( a : bool; b : bool when a ) returns (c : bool when b; d : bool when c);
diff --git a/src/test/should_work/NONREG/cminus.lus b/src/test/should_work/NONREG/cminus.lus
new file mode 100644
index 00000000..c183e87b
--- /dev/null
+++ b/src/test/should_work/NONREG/cminus.lus
@@ -0,0 +1,21 @@
+node TWO_STATES(set,reset,init:bool) returns (state:bool);
+let
+	state = init -> if set and not pre(state) then true
+						else if reset and pre(state) then false
+						else pre(state);
+tel
+
+
+node TWO_BUTTONS(on, off,init:bool) returns(state:bool);
+let
+	state = init -> if on then true else if off then false else pre(state);
+tel
+
+node cminus (e1,e2,e3,init:bool) returns (ok:bool);
+var s1,s2:bool;
+let
+	s1= TWO_STATES(e1,e2,init);
+	s2= TWO_BUTTONS(e1,e2,init);
+	assert not(e1 and e2)->true;
+	ok =(s1=s2) ;
+tel
diff --git a/src/test/should_work/NONREG/compteur.lus b/src/test/should_work/NONREG/compteur.lus
new file mode 100644
index 00000000..28c62e2e
--- /dev/null
+++ b/src/test/should_work/NONREG/compteur.lus
@@ -0,0 +1,4 @@
+node compteur(evt: bool) returns (cpt: int);
+let
+  cpt = (0 -> pre(cpt)) + (if evt then 1 else 0);
+tel
diff --git a/src/test/should_work/NONREG/cpt.lus b/src/test/should_work/NONREG/cpt.lus
new file mode 100644
index 00000000..96d02189
--- /dev/null
+++ b/src/test/should_work/NONREG/cpt.lus
@@ -0,0 +1,5 @@
+node cpt(evt: bool; reset: bool) returns (cpt: int);
+let
+  cpt = if reset then 0
+        else (0 -> pre(cpt)) + (if evt then 1 else 0);
+tel
diff --git a/src/test/should_work/NONREG/cst.lus b/src/test/should_work/NONREG/cst.lus
new file mode 100644
index 00000000..502580f8
--- /dev/null
+++ b/src/test/should_work/NONREG/cst.lus
@@ -0,0 +1,9 @@
+const i, j, k: int;
+
+node cst(x:int) returns (y:int);
+var z,t: int;
+let
+  z = i+j;
+  t = j-k;
+  y = x + 2*z + 3*t;
+tel
diff --git a/src/test/should_work/NONREG/deconne.lus b/src/test/should_work/NONREG/deconne.lus
new file mode 100644
index 00000000..6896d056
--- /dev/null
+++ b/src/test/should_work/NONREG/deconne.lus
@@ -0,0 +1,30 @@
+type pendule;
+
+const T=0.1; L=2.0; G=10.0; 
+
+extern function sin(x:real) returns (y:real);
+
+extern function cos(x:real) returns (y:real);
+
+extern function make_pend(x0,y0,x,y:real) returns (p:pendule);
+
+
+node deconne(delta:real) returns (p:pendule);
+-------------------------------------------------------------
+--pendule asservi
+--delta est une pichenette en derivee seconde initiale
+-------------------------------------------------------------
+var teta,x0,y0,x,y:real;
+let
+	
+	-----------------------------------------------------
+	--geometrie
+	-----------------------------------------------------
+	teta = 3.14;
+	x0 = 0.;
+	y0 = 0.;
+	x  = x0+L*sin(teta);
+	y  = y0+L*cos(teta);
+	p  = make_pend(x0,y0,x,y);
+	
+tel;
diff --git a/src/test/should_work/NONREG/dep.lus b/src/test/should_work/NONREG/dep.lus
new file mode 100644
index 00000000..3f6f8fc4
--- /dev/null
+++ b/src/test/should_work/NONREG/dep.lus
@@ -0,0 +1,9 @@
+
+node dep( x : int )
+returns ( u,v,y :int);
+
+let
+	u = x -> x + pre(x) ;
+	v = 0 -> pre(y) + 1 ;
+	y = 0 -> pre(v) + 1 ;
+tel
diff --git a/src/test/should_work/NONREG/dependeur.lus b/src/test/should_work/NONREG/dependeur.lus
new file mode 100644
index 00000000..6ea933df
--- /dev/null
+++ b/src/test/should_work/NONREG/dependeur.lus
@@ -0,0 +1,24 @@
+(*  This file is a trivial test for dependency analysis *)
+(* time_in_min must be calculated before minute and hour *)
+
+node dependeur(
+		time_in_ms:int -- time of the day in millisecond from 00:00
+		) returns (
+			hour:int;
+			minute:int;
+			second:int;
+			ms:int
+			);
+var
+	time_in_min: int;
+	time_in_second: int;
+let
+	
+	hour = time_in_min div 60 ;
+	minute = time_in_min mod 60 ;
+	time_in_min = time_in_second div 60 ;
+	second = time_in_second mod 60 ;
+	time_in_second = time_in_ms div 1000 ;
+	ms = time_in_ms mod 1000 ;
+	
+tel
diff --git a/src/test/should_work/NONREG/dependeur_struct.lus b/src/test/should_work/NONREG/dependeur_struct.lus
new file mode 100644
index 00000000..d5faff60
--- /dev/null
+++ b/src/test/should_work/NONREG/dependeur_struct.lus
@@ -0,0 +1,27 @@
+(*  This file is another trivial test for dependency analysis *)
+
+(* time_in_min must be calculated before minute and hour *)
+
+type
+  time = {	h:      int;	-- hour
+                m: 	int;	-- minute
+		s: 	int;	-- second
+		ms: 	int	-- ms		
+	};
+
+node dependeur_struct(
+		time_in_ms:int -- time of the day in millisecond from 00:00
+		) returns (theTime:time);
+var
+	time_in_min: int;
+	time_in_second: int;
+let
+	
+	theTime.h = time_in_min div 60 ; -- hour 
+	theTime.m = time_in_min mod 60 ; -- minute
+	time_in_min = time_in_second div 60 ;
+	theTime.s = time_in_second mod 60 ; -- second
+	time_in_second = time_in_ms div 1000 ;
+	theTime.ms = time_in_ms mod 1000 ; -- ms
+	
+tel
diff --git a/src/test/should_work/NONREG/drapfab.lus b/src/test/should_work/NONREG/drapfab.lus
new file mode 100644
index 00000000..6d4175bf
--- /dev/null
+++ b/src/test/should_work/NONREG/drapfab.lus
@@ -0,0 +1,42 @@
+node drapfab (bleu, rouge, vert : bool)
+		returns (
+--arret, 
+--indet, 
+a_or_i,
+direct 
+--indirect 
+:bool);
+var
+
+arret, 
+indet : bool;
+
+let
+  assert # (bleu, rouge, vert);
+  assert bleu or rouge or vert;
+
+  direct = false -> ((rouge and pre(bleu))
+		     or
+		     (vert and pre(rouge))
+		     or
+		     (bleu and pre(vert)));
+(*
+  indirect = false -> ((bleu and pre(rouge))
+		       or
+		       (rouge and pre(vert))
+		       or
+		       (vert and pre(bleu)));
+*)
+	a_or_i = indet or arret;
+
+  indet = true -> ((rouge and pre(rouge) and not pre(false -> pre(rouge)))
+		   or
+		   (bleu and pre(bleu) and not pre(false -> pre(bleu)))
+		   or
+		   (vert and pre(vert) and not pre(false -> pre(vert))));
+  arret = false -> ((rouge and pre(rouge) and pre(false -> pre(rouge)))
+		   or
+		   (bleu and pre(bleu) and pre(false -> pre(bleu)))
+		   or
+		   (vert and pre(vert) and pre(false -> pre(vert))));
+tel
diff --git a/src/test/should_work/NONREG/enum.lus b/src/test/should_work/NONREG/enum.lus
new file mode 100644
index 00000000..cc2bfe5d
--- /dev/null
+++ b/src/test/should_work/NONREG/enum.lus
@@ -0,0 +1,14 @@
+-- Test enum type code generation
+
+
+type
+    couleur = enum {bleu, blanc, rouge};
+    color   = enum {blue, white, redd};
+
+
+node boo(e: int) returns (c: couleur;  c2: color);
+let
+  c = if e = 0 then bleu else if e = 1 then blanc else rouge;
+  c2 = if e = 0 then blue else if e = 1 then white else redd;
+  
+tel
diff --git a/src/test/should_work/NONREG/eq1.lus b/src/test/should_work/NONREG/eq1.lus
new file mode 100644
index 00000000..b20d755a
--- /dev/null
+++ b/src/test/should_work/NONREG/eq1.lus
@@ -0,0 +1,11 @@
+
+node eq1 (a,b,c,d,e: bool)
+returns (w,x,y,z: bool);
+let
+  w = if b or c then not (d and e) else false;
+  x = true;
+  y = #(c,d);
+  z = (w <> c) and not e;
+  assert not (d and e);
+tel
+  
diff --git a/src/test/should_work/NONREG/ex.lus b/src/test/should_work/NONREG/ex.lus
new file mode 100644
index 00000000..b4118866
--- /dev/null
+++ b/src/test/should_work/NONREG/ex.lus
@@ -0,0 +1,10 @@
+type  
+  t = int^1^2^3^4;
+  t1 = t^4;
+  t2 = {a: int; b: bool^11^22};
+  s1 = {x:int; y:t};
+  s = {x:t; y:s1};
+node ex(a: s) returns (b: int);
+let
+  b = a.x[0][0][0][0] + a.y.y[0][0][0][0]; 
+tel
\ No newline at end of file
diff --git a/src/test/should_work/NONREG/exclusion.lus b/src/test/should_work/NONREG/exclusion.lus
new file mode 100644
index 00000000..faf1d8b4
--- /dev/null
+++ b/src/test/should_work/NONREG/exclusion.lus
@@ -0,0 +1,17 @@
+-- Test de l'operateur exclusion
+-- [YR ; 3 novembre 1997]
+
+node exclusion(a:bool; b:bool; c:bool; d:bool)
+returns ( xor_a_b: bool;
+			 xor_c_d: bool;
+			 xor_a_b_c: bool;
+			 xor_a_b_c_d: bool;
+			 xor_xor_ab_xor_cd: bool);
+let
+	xor_a_b =  #(a,b);
+	xor_c_d =  #(d,c);
+	xor_a_b_c =  #(a,b,c);
+	xor_a_b_c_d =  #(a,b,c,d);
+	
+	xor_xor_ab_xor_cd = #(#(a,b), #(c,d));
+tel
diff --git a/src/test/should_work/NONREG/fby.lus b/src/test/should_work/NONREG/fby.lus
new file mode 100644
index 00000000..edf03f69
--- /dev/null
+++ b/src/test/should_work/NONREG/fby.lus
@@ -0,0 +1,4 @@
+node followed_by(ck: bool) returns (x: int);
+let
+	x = 0 -> pre(x) +1;
+tel
diff --git a/src/test/should_work/NONREG/flo.lus b/src/test/should_work/NONREG/flo.lus
new file mode 100644
index 00000000..083a43e9
--- /dev/null
+++ b/src/test/should_work/NONREG/flo.lus
@@ -0,0 +1,17 @@
+node SWITCH( init, on, off: bool) returns (state:bool);
+let
+  state = if on then true
+          else if off then false 
+          else (init -> pre(state));
+tel
+
+
+node flo (i1, i2, on1, on2, off1, off2: bool ) returns (flo:bool);
+let
+  flo = SWITCH(i1,on1,off1) and SWITCH (i2,on2,off2);
+tel
+
+
+
+
+
diff --git a/src/test/should_work/NONREG/hanane.lus b/src/test/should_work/NONREG/hanane.lus
new file mode 100644
index 00000000..10616739
--- /dev/null
+++ b/src/test/should_work/NONREG/hanane.lus
@@ -0,0 +1,29 @@
+type 
+  t1, t2, t3;
+  string = int^a;
+  string2d = string^a;
+  structT = {x: int;  y: real;  z: string2d^a};
+  tabStruct = structT^2;
+const 
+  a: int = 4;
+  b: bool = true;
+  c: real = 3.14;
+
+node hanane(a1: bool; b1:  string2d when a1; c1: tabStruct when a1) 
+  returns (res: bool when a1);
+var
+  h1: int^4;
+  h2: tabStruct;
+  h3: int when a1;
+  h4: real when a1;
+  h5: string2d^a when a1;
+  h6: string2d ;
+let
+  res = (h1[0]>1) when a1;
+  h1 = current(if pre res then b1[1] else b1[2]);
+  h2 = current(c1);
+  h3 = c1[0].x + c1[1].z[2][1][0];
+  h4 = c1[1].y;
+  h5 = c1[1].z;
+  h6 = current(c1[1].z[2]);
+tel
\ No newline at end of file
diff --git a/src/test/should_work/NONREG/import1.lus b/src/test/should_work/NONREG/import1.lus
new file mode 100644
index 00000000..0647280a
--- /dev/null
+++ b/src/test/should_work/NONREG/import1.lus
@@ -0,0 +1,5 @@
+extern node imp(x: int) returns (y: int);
+node import1(a,b: int) returns (c: int);
+let
+  c = imp(a) + imp(b);
+tel
diff --git a/src/test/should_work/NONREG/initial.lus b/src/test/should_work/NONREG/initial.lus
new file mode 100644
index 00000000..564f3857
--- /dev/null
+++ b/src/test/should_work/NONREG/initial.lus
@@ -0,0 +1,7 @@
+node initial(justDoIt:bool)
+returns (oa:bool; ob:int; oc:real);
+let
+   oa = false -> pre(oa) ;
+   ob = 42 -> pre(ob) ;
+   oc = 42.42 -> pre(oc) ;
+tel
diff --git a/src/test/should_work/NONREG/long_et_stupide_nom_de_noeud.lus b/src/test/should_work/NONREG/long_et_stupide_nom_de_noeud.lus
new file mode 100644
index 00000000..62a6f852
--- /dev/null
+++ b/src/test/should_work/NONREG/long_et_stupide_nom_de_noeud.lus
@@ -0,0 +1,15 @@
+-- [YR 5/11/97]
+-- La librairie pty.h de Pascal Raymond est sensible a la
+-- longueur des chaines construites a partir d'un format.
+
+-- Cette longueur depend dans notre generateur de code C
+-- des noms des noeud, des parametres, des variables, des champs.
+
+-- Ce fichier permet de tester des cas extremes
+-- qui suivant la loi de Murphy, vont certainement se retrouver.
+
+node long_et_stupide_nom_de_noeud(long_parametre:int)
+returns (long_et_stupide_nom_de_sortie:int);
+let
+	long_et_stupide_nom_de_sortie = long_parametre + pre(long_parametre);
+tel
diff --git a/src/test/should_work/NONREG/minmax1.lus b/src/test/should_work/NONREG/minmax1.lus
new file mode 100644
index 00000000..c86bd5cc
--- /dev/null
+++ b/src/test/should_work/NONREG/minmax1.lus
@@ -0,0 +1,6 @@
+node minmax1(a,b:int)
+	returns(min,max:int);
+
+let
+	(min,max) = if (a<b) then (a,b) else (b,a);
+tel
diff --git a/src/test/should_work/NONREG/minmax2.lus b/src/test/should_work/NONREG/minmax2.lus
new file mode 100644
index 00000000..d5dd6c6e
--- /dev/null
+++ b/src/test/should_work/NONREG/minmax2.lus
@@ -0,0 +1,16 @@
+-- Simple "tupled" node call
+
+node minmax2(a,b:int)
+	returns(min,max:int);
+
+let
+	(min,max) = minmax(a,b);
+tel
+
+
+node minmax(a,b:int)
+	returns(min,max:int);
+
+let
+	(min,max) = if (a<b) then (a,b) else (b,a);
+tel
diff --git a/src/test/should_work/NONREG/minmax3.lus b/src/test/should_work/NONREG/minmax3.lus
new file mode 100644
index 00000000..4751c988
--- /dev/null
+++ b/src/test/should_work/NONREG/minmax3.lus
@@ -0,0 +1,22 @@
+-- Not so simple "tupled" node call
+
+node minmax3(a,b,c:int)
+	returns(min,midle,MAX:int);
+var
+	min_ab,MAX_ab:int;
+	MAX_minab_c:int;
+let
+	(min_ab,	MAX_ab)		= minmax(a,b);
+
+	(min,		MAX_minab_c)= minmax(min_ab,c);
+
+	(midle,	MAX)			= minmax(MAX_ab,MAX_minab_c);
+tel
+
+
+node minmax(a,b:int)
+	returns(min,max:int);
+
+let
+	(min,max) = if (a<=b) then (a,b) else (b,a);
+tel
diff --git a/src/test/should_work/NONREG/minmax4.lus b/src/test/should_work/NONREG/minmax4.lus
new file mode 100644
index 00000000..b0d6044e
--- /dev/null
+++ b/src/test/should_work/NONREG/minmax4.lus
@@ -0,0 +1,27 @@
+-- Not so simple "tupled" node call
+
+node minmax4(a,b,c,d:int)
+	returns(n1,n2,n3,n4:int);
+var
+	min_ab, MAX_ab :int;
+	min_cd, MAX_cd :int;
+	
+	MAX__minab_mincd:int;
+	min__MAXab_MAXcd:int;
+let
+	(min_ab, MAX_ab) = minmax(a,b) ;
+	
+	(min_cd, MAX_cd) = minmax(c,d) ;
+	
+	(n1,MAX__minab_mincd) = minmax(min_ab,min_cd);
+	(min__MAXab_MAXcd,n4) = minmax(MAX_ab,MAX_cd);
+	
+	(n2,n3) = minmax(MAX__minab_mincd,min__MAXab_MAXcd);
+tel
+
+
+node minmax(a,b:int)
+	returns(min,max:int);
+let
+	(min,max) = if (a<=b) then (a,b) else (b,a);
+tel
diff --git a/src/test/should_work/NONREG/minmax4_bis.lus b/src/test/should_work/NONREG/minmax4_bis.lus
new file mode 100644
index 00000000..390ed978
--- /dev/null
+++ b/src/test/should_work/NONREG/minmax4_bis.lus
@@ -0,0 +1,29 @@
+-- Not so simple "tupled" node call
+-- random equation order...
+
+node minmax4_bis(a,b,c,d:int)
+	returns(n1,n2,n3,n4:int);
+var
+	min_ab, MAX_ab :int;
+	min_cd, MAX_cd :int;
+	
+	MAX__minab_mincd:int;
+	min__MAXab_MAXcd:int;
+let
+	(min_ab, MAX_ab) = minmax(a,b) ;
+
+	(n2,n3) = minmax(MAX__minab_mincd,min__MAXab_MAXcd);
+		
+	(n1,MAX__minab_mincd) = minmax(min_ab,min_cd);
+
+	(min__MAXab_MAXcd,n4) = minmax(MAX_ab,MAX_cd);
+	
+	(min_cd, MAX_cd) = minmax(c,d) ;
+tel
+
+
+node minmax(a,b:int)
+	returns(min,max:int);
+let
+	(min,max) = if (a<=b) then (a,b) else (b,a);
+tel
diff --git a/src/test/should_work/NONREG/minmax5.lus b/src/test/should_work/NONREG/minmax5.lus
new file mode 100644
index 00000000..1fcb877e
--- /dev/null
+++ b/src/test/should_work/NONREG/minmax5.lus
@@ -0,0 +1,24 @@
+-- Not so simple "tupled" node call
+-- Use a proc call instead of a node .
+
+node minmax5(a,b,c,d:int)
+	returns(n1,n2,n3,n4:int);
+var
+	min_ab, MAX_ab :int;
+	min_cd, MAX_cd :int;
+	
+	MAX__minab_mincd:int;
+	min__MAXab_MAXcd:int;
+let
+	(min_ab, MAX_ab) = minmax(a,b) ;
+	
+	(min_cd, MAX_cd) = minmax(c,d) ;
+	
+	(n1,MAX__minab_mincd) = minmax(min_ab,min_cd);
+	(min__MAXab_MAXcd,n4) = minmax(MAX_ab,MAX_cd);
+	
+	(n2,n3) = minmax(MAX__minab_mincd,min__MAXab_MAXcd);
+tel
+
+
+extern function minmax(a,b:int) returns(min,max:int);
diff --git a/src/test/should_work/NONREG/minmax5_random.lus b/src/test/should_work/NONREG/minmax5_random.lus
new file mode 100644
index 00000000..0abc0a22
--- /dev/null
+++ b/src/test/should_work/NONREG/minmax5_random.lus
@@ -0,0 +1,29 @@
+-- Not so simple "tupled" node call
+-- Use a proc call instead of a node .
+-- put a random order on the definition
+
+-- The DC compiler should find a partial order.
+-- And we should have n1 <= n2 <= n3 <= n4.
+
+node minmax5_random(a,b,c,d:int)
+	returns(n1,n2,n3,n4:int);
+var
+	min_ab, MAX_ab :int;
+	min_cd, MAX_cd :int;
+	
+	MAX__minab_mincd:int;
+	min__MAXab_MAXcd:int;
+let
+	(min__MAXab_MAXcd,n4) = minmax(MAX_ab,MAX_cd);
+	
+	(min_cd, MAX_cd) = minmax(c,d);
+	
+	(n1,MAX__minab_mincd) = minmax(min_ab,min_cd);
+	
+	(n2,n3) = minmax(MAX__minab_mincd,min__MAXab_MAXcd);
+	
+	(min_ab, MAX_ab) = minmax(a,b);
+tel
+
+
+extern function minmax(a,b:int) returns(min,max:int);
diff --git a/src/test/should_work/NONREG/minmax6.lus b/src/test/should_work/NONREG/minmax6.lus
new file mode 100644
index 00000000..2a51664f
--- /dev/null
+++ b/src/test/should_work/NONREG/minmax6.lus
@@ -0,0 +1,36 @@
+-- Not so simple "tupled" node call
+
+node minmax6(a,b,c,d,e,f:int)
+	returns(n1,n2,n3,n4,n5,n6:int);
+var
+	min_ab, MAX_ab :int;
+	min_cd, MAX_cd :int;
+	min_ef, MAX_ef :int;
+	
+	m1,m2,m4,m5 :int;
+	M1,M2,M3,M5 :int;
+
+
+let
+	(min_ab, MAX_ab) = minmax(a,b);	
+	(min_cd, MAX_cd) = minmax(c,d);
+	(min_ef, MAX_ef) = minmax(e,f);
+	
+	(m1,M1) = minmax(min_cd, min_ef);
+	(m2,M2) = minmax(MAX_ab, MAX_cd);
+
+	(n1,M3) = minmax(min_ab, m1);
+	(m4,n6) = minmax(M2, MAX_ef);
+	
+	(m5,M5) = minmax(M1, m2);
+	
+	(n2,n3) = minmax(M3, m5);
+	(n4,n5) = minmax(M5, m4);
+tel
+
+
+node minmax(a,b:int)
+	returns(min,max:int);
+let
+	(min,max) = if (a<=b) then (a,b) else (b,a);
+tel
diff --git a/src/test/should_work/NONREG/mm.lus b/src/test/should_work/NONREG/mm.lus
new file mode 100644
index 00000000..88838ee4
--- /dev/null
+++ b/src/test/should_work/NONREG/mm.lus
@@ -0,0 +1,7 @@
+type pair = {a:int; b:int};
+type pairpair = {a:pair; b:pair};
+
+node mm(a,b: int) returns (min,max: int);
+let
+  (min,max)= if(a>b) then (b,a) else (a,b);
+tel
diff --git a/src/test/should_work/NONREG/mm1.lus b/src/test/should_work/NONREG/mm1.lus
new file mode 100644
index 00000000..abebe0ec
--- /dev/null
+++ b/src/test/should_work/NONREG/mm1.lus
@@ -0,0 +1,7 @@
+type pair = {a:int; b:int};
+type pairpair = {a:pair; b:pair};
+
+node mm1 (a,b: int) returns (y: pair);
+let
+	(y.a,y.b) = if(a>b) then (b,a) else (a,b);
+tel
diff --git a/src/test/should_work/NONREG/mm22.lus b/src/test/should_work/NONREG/mm22.lus
new file mode 100644
index 00000000..046c908d
--- /dev/null
+++ b/src/test/should_work/NONREG/mm22.lus
@@ -0,0 +1,8 @@
+type pair = {a:int; b:int};
+type pairpair = {a:pair; b:pair};
+
+node mm22 (a,b: int) returns (y: pair);
+let
+	y.a = if(a>b) then b else a;
+	y.b = if(a>b) then a else b;
+tel
diff --git a/src/test/should_work/NONREG/mm3.lus b/src/test/should_work/NONREG/mm3.lus
new file mode 100644
index 00000000..46b1710f
--- /dev/null
+++ b/src/test/should_work/NONREG/mm3.lus
@@ -0,0 +1,9 @@
+type pair = {a:int; b:int};
+type pairpair = {a:pair; b:pair};
+
+node mm3 (a:pair) returns (y: pair);
+let
+   (y.a,y.b) = if a.a>a.b
+       then (a.b,a.a)
+       else (a.a,a.b);
+tel
diff --git a/src/test/should_work/NONREG/mouse.lus b/src/test/should_work/NONREG/mouse.lus
new file mode 100644
index 00000000..cb501913
--- /dev/null
+++ b/src/test/should_work/NONREG/mouse.lus
@@ -0,0 +1,16 @@
+node mouse(click,clock:bool; delay:int) returns (single_click,double_click: bool);
+var clock_decount: int; counting, more_than_one_click: bool;
+let
+  single_click = edge(not counting) and not (false-> pre more_than_one_click);
+  double_click = edge(not counting) and (false-> pre more_than_one_click);
+  more_than_one_click = click and (false -> pre(counting));
+  counting = (clock_decount > 0);
+  clock_decount = if click and (true -> not pre(counting)) then 
+                     if clock then delay - 1 else delay
+                  else if clock and (false -> pre(counting)) 
+                  then pre(clock_decount) - 1
+                  else 0 -> pre(clock_decount);
+tel
+
+node edge(x:bool) returns (e: bool);
+let e = false -> x and not pre x; tel
diff --git a/src/test/should_work/NONREG/mouse1.lus b/src/test/should_work/NONREG/mouse1.lus
new file mode 100644
index 00000000..567924cc
--- /dev/null
+++ b/src/test/should_work/NONREG/mouse1.lus
@@ -0,0 +1,14 @@
+node mouse1(click,clock:bool; delay:int) returns (single_click,double_click: bool);
+var clock_decount: int; counting, more_than_one_click: bool;
+let
+  single_click = not counting and not (false-> pre more_than_one_click);
+  more_than_one_click = click and (false -> pre(counting));
+  double_click = not counting and (false-> pre more_than_one_click);
+  counting = (clock_decount > 0);
+  clock_decount = if click and (true -> not pre(counting)) then 
+                     if clock then delay - 1 else delay
+                  else if clock and (false -> pre(counting)) 
+                  then pre(clock_decount) - 1
+                  else 0 -> pre(clock_decount);
+tel
+
diff --git a/src/test/should_work/NONREG/mouse2.lus b/src/test/should_work/NONREG/mouse2.lus
new file mode 100644
index 00000000..3a5937a3
--- /dev/null
+++ b/src/test/should_work/NONREG/mouse2.lus
@@ -0,0 +1,40 @@
+node mouse2
+	(	
+	click:bool;
+	clock:bool;
+	delay:int
+	) 
+	returns
+	(
+	single: bool;
+	double: bool
+	);
+var 
+	clock_decount: int;
+	counting: bool; 
+	more_than_one_click: bool;
+let
+  single = edge(not counting) and not (false-> pre more_than_one_click);
+  double = edge(not counting) and (false-> pre more_than_one_click);
+  more_than_one_click = click and (false -> pre(counting));
+  counting = (clock_decount > 0);
+  clock_decount = if click and (true -> not pre(counting)) then 
+                     if clock then delay - 1 else delay
+                  else if clock and (false -> pre(counting)) 
+                  then pre(clock_decount) - 1
+                  else 0 -> pre(clock_decount);
+tel
+
+
+
+node edge
+	(
+	x:bool
+	) 
+	returns
+	(
+	e: bool
+	);
+let
+	e = false -> x and not pre x;
+tel
diff --git a/src/test/should_work/NONREG/mouse3.lus b/src/test/should_work/NONREG/mouse3.lus
new file mode 100644
index 00000000..73882b85
--- /dev/null
+++ b/src/test/should_work/NONREG/mouse3.lus
@@ -0,0 +1,22 @@
+node mouse3(
+	click:bool;
+	clock:bool
+	; 
+	delay: int
+	)
+returns (
+	clock_decount: int
+	);
+var 
+	counting: bool;
+let
+	counting = (clock_decount > 0);
+	clock_decount = 
+		if click and (true->not pre(counting)) then
+			if clock then delay - 1
+			else delay
+		else 
+			if clock and (false -> pre(counting))
+			then pre(clock_decount) - 1
+         else 0 -> pre(clock_decount);
+tel
diff --git a/src/test/should_work/NONREG/multiclock.lus b/src/test/should_work/NONREG/multiclock.lus
new file mode 100644
index 00000000..1d4a07b5
--- /dev/null
+++ b/src/test/should_work/NONREG/multiclock.lus
@@ -0,0 +1,20 @@
+node multiclock ( x, y: int; c: bool; z: int when c )
+        returns ( s: int when c);
+var
+  h: bool when c ;
+  u: int when h ;
+let
+  h = ( true when c ) -> ( ( x + y ) when c) < z ;
+  u = ( z when h ) -> moyenne( z when h,  pre u ) ;
+  s = current u ;
+tel
+
+/* 
+  WARNING: la division reelle a une semantique differente de celle de SCADE!!!
+*/
+node moyenne( x, y: int ) returns ( m: int );
+var s: int;
+let
+  m = s / 2 ;
+  s = x + y ;
+tel
\ No newline at end of file
diff --git a/src/test/should_work/NONREG/nc1.lus b/src/test/should_work/NONREG/nc1.lus
new file mode 100644
index 00000000..e7cdbebc
--- /dev/null
+++ b/src/test/should_work/NONREG/nc1.lus
@@ -0,0 +1,16 @@
+node nc1 (nc1e1,nc1e2:bool) returns (nc1s:bool);
+var nc1b1:bool;
+let
+	nc1b1 = n1(nc1e1,nc1e2);
+	nc1s = (nc1b1 or nc1e1) ;
+tel
+
+
+node n1(n1e1,n1e2:bool) returns (n1s:bool);
+var n1b1:bool;
+	 n1b2:bool;
+let
+	n1b1 = n1e1 or n1e2 ;
+	n1b2 = n1e1 and n1e2 ;
+	n1s = (n1b1 or n1b2);				
+tel
diff --git a/src/test/should_work/NONREG/nc10.lus b/src/test/should_work/NONREG/nc10.lus
new file mode 100644
index 00000000..d0d20b6f
--- /dev/null
+++ b/src/test/should_work/NONREG/nc10.lus
@@ -0,0 +1,37 @@
+-- Appel de noeuds avec sortie multiple
+
+node nc10 (nc10e1:int) returns (ok:bool);
+var nc10b1:int;
+let
+
+	nc10b1 = n1(nc10e1);
+	
+	ok = (nc10b1 = nc10e1*24);
+
+tel
+
+
+
+
+node n1(n1e1:int) returns (n1s:int);
+let
+	n1s = n2(n1e1,n1e1) + n2(2*n1e1,2*n1e1);				
+tel
+
+node n2(n2e1,n2e2:int) returns (n2s:int);
+let
+	n2s = n3(n2e1,n2e1) + n3(n2e2,n2e2);				
+tel
+
+node n3(n3e1,n3e2:int) returns (n3s:int);
+var n3i1,n3i2:int;
+let
+	(n3i1, n3i2) = n4(n3e1,n3e1,n3e2,n3e2);	
+	n3s = n3i1 + n3i2;				
+tel
+
+node n4(n4e1,n4e2,n4e3,n4e4:int) returns (n4s1,n4s2:int);
+let
+	n4s1 = n4e1 + n4e2 ;
+	n4s2 = n4e3 + n4e4 ;			
+tel
diff --git a/src/test/should_work/NONREG/nc2.lus b/src/test/should_work/NONREG/nc2.lus
new file mode 100644
index 00000000..7d3a1bde
--- /dev/null
+++ b/src/test/should_work/NONREG/nc2.lus
@@ -0,0 +1,16 @@
+node nc2 (nc2e1,nc2e2:bool) returns (nc2s:bool);
+var nc2b1:bool;
+let
+	nc2b1 = n1(nc2e1 or nc2e2, nc2e1 and nc2e2);
+	nc2s = nc2b1 and not nc2b1 ;
+tel
+
+
+node n1(n1e1,n1e2:bool) returns (n1s:bool);
+var n1b1:bool;
+	 n1b2:bool;
+let
+	n1b1 = n1e1 or n1e2 ;
+	n1b2 = n1e1 and n1e2 ;
+	n1s = n1b1 or n1b2;				
+tel
diff --git a/src/test/should_work/NONREG/nc3.lus b/src/test/should_work/NONREG/nc3.lus
new file mode 100644
index 00000000..6432ab6b
--- /dev/null
+++ b/src/test/should_work/NONREG/nc3.lus
@@ -0,0 +1,19 @@
+node nc3 (nc3e1,nc3e2:bool) returns (nc3s:bool);
+var nc3b1:bool;
+	 nc3b2:bool;
+let
+	nc3b1 = n1(nc3e1 or nc3e2, nc3e1 and nc3e2);
+	nc3s = (nc3b1 and not nc3b2) ;
+	nc3b2 = n1(nc3e1 and nc3e2, nc3e1 or nc3e2);
+tel
+
+
+node n1(n1e1,n1e2:bool) returns (n1s:bool);
+var n1b1:bool;
+	 n1b2:bool;
+let
+	n1b1 = n1e1 or n1e2 ;
+	n1b2 = n1e1 and n1e2 ;
+	n1s = (n1b1 or n1b2);				
+tel
+
diff --git a/src/test/should_work/NONREG/nc4.lus b/src/test/should_work/NONREG/nc4.lus
new file mode 100644
index 00000000..b8a85f20
--- /dev/null
+++ b/src/test/should_work/NONREG/nc4.lus
@@ -0,0 +1,27 @@
+node nc4 (nc4e1,nc4e2:bool) returns (nc4s:bool);
+var nc4b1:bool;
+	 nc4b2:bool;
+let
+	nc4b1 = n1(nc4e1 or nc4e2, nc4e1 and nc4e2);
+	nc4s = (nc4b1 and not nc4b2) ;
+	nc4b2 = n2(nc4e1 and nc4e2, nc4e1 or nc4e2);
+tel
+
+
+node n1(n1e1,n1e2:bool) returns (n1s:bool);
+var n1b1:bool;
+	 n1b2:bool;
+let
+	n1b1 = n1e1 or n1e2 ;
+	n1b2 = n1e1 and n1e2 ;
+	n1s = (n1b1 or n1b2);				
+tel
+
+node n2(n2e1,n2e2:bool) returns (n2s:bool);
+var n2b1:bool;
+	 n2b2:bool;
+let
+	n2b1 = n2e1 and n2e2 ;
+	n2b2 = n2e1 or n2e2 ;
+	n2s = (n2b1 and n2b2);			
+tel
diff --git a/src/test/should_work/NONREG/nc5.lus b/src/test/should_work/NONREG/nc5.lus
new file mode 100644
index 00000000..62721681
--- /dev/null
+++ b/src/test/should_work/NONREG/nc5.lus
@@ -0,0 +1,33 @@
+
+
+node nc5 (nc5e1:int) returns (ok:bool);
+var nc5b1:int;
+let
+
+	nc5b1 = n1(nc5e1);
+	
+	ok = (nc5b1 = nc5e1+1);
+
+tel
+
+
+
+node n1(n1e1:int) returns (n1s:int);
+let
+	n1s = n2(n1e1);				
+tel
+
+node n2(n2e1:int) returns (n2s:int);
+let
+	n2s = n3(n2e1);				
+tel
+
+node n3(n3e1:int) returns (n3s:int);
+let
+	n3s = n4(n3e1);				
+tel
+
+node n4(n4e1:int) returns (n4s:int);
+let
+	n4s = n4e1 + 1;				
+tel
diff --git a/src/test/should_work/NONREG/nc6.lus b/src/test/should_work/NONREG/nc6.lus
new file mode 100644
index 00000000..a9454282
--- /dev/null
+++ b/src/test/should_work/NONREG/nc6.lus
@@ -0,0 +1,33 @@
+
+
+node nc6 (nc6e1:int) returns (ok:bool);
+var nc6b1:int;
+let
+
+	nc6b1 = n1(nc6e1);
+	
+	ok = (nc6b1 = nc6e1+4);
+
+tel
+
+
+
+node n1(n1e1:int) returns (n1s:int);
+let
+	n1s = n2(n1e1+1);				
+tel
+
+node n2(n2e1:int) returns (n2s:int);
+let
+	n2s = n3(n2e1+1);				
+tel
+
+node n3(n3e1:int) returns (n3s:int);
+let
+	n3s = n4(n3e1+1);				
+tel
+
+node n4(n4e1:int) returns (n4s:int);
+let
+	n4s = n4e1 + 1;				
+tel
diff --git a/src/test/should_work/NONREG/nc7.lus b/src/test/should_work/NONREG/nc7.lus
new file mode 100644
index 00000000..f49336ba
--- /dev/null
+++ b/src/test/should_work/NONREG/nc7.lus
@@ -0,0 +1,33 @@
+
+
+node nc7 (nc7e1:int) returns (ok:bool);
+var nc7b1:int;
+let
+
+	nc7b1 = n1(nc7e1);
+	
+	ok = (nc7b1 = nc7e1*5);
+
+tel
+
+
+
+node n1(n1e1:int) returns (n1s:int);
+let
+	n1s = n2(n1e1);				
+tel
+
+node n2(n2e1:int) returns (n2s:int);
+let
+	n2s = n3(n2e1);				
+tel
+
+node n3(n3e1:int) returns (n3s:int);
+let
+	n3s = n4(n3e1,n3e1,n3e1,n3e1,n3e1);				
+tel
+
+node n4(n4e1,n4e2,n4e3,n4e4,n4e5:int) returns (n4s:int);
+let
+	n4s = n4e1 + n4e2 + n4e3 + n4e4 + n4e5;				
+tel
diff --git a/src/test/should_work/NONREG/nc8.lus b/src/test/should_work/NONREG/nc8.lus
new file mode 100644
index 00000000..bd8b4548
--- /dev/null
+++ b/src/test/should_work/NONREG/nc8.lus
@@ -0,0 +1,34 @@
+
+
+node nc8 (nc8e1:int) returns (ok:bool);
+var nc8b1:int;
+let
+
+	nc8b1 = n1(nc8e1);
+	
+	ok = (nc8b1 = nc8e1*32);
+
+tel
+
+
+
+
+node n1(n1e1:int) returns (n1s:int);
+let
+	n1s = n2(n1e1,n1e1) + n2(n1e1,n1e1);				
+tel
+
+node n2(n2e1,n2e2:int) returns (n2s:int);
+let
+	n2s = n3(n2e1,n2e1) + n3(n2e2,n2e2);				
+tel
+
+node n3(n3e1,n3e2:int) returns (n3s:int);
+let
+	n3s = n4(n3e1,n3e1,n3e1,n3e1) + n4(n3e2,n3e2,n3e2,n3e2);				
+tel
+
+node n4(n4e1,n4e2,n4e3,n4e4:int) returns (n4s:int);
+let
+	n4s = n4e1 + n4e2 + n4e3 + n4e4 ;				
+tel
diff --git a/src/test/should_work/NONREG/nc9.lus b/src/test/should_work/NONREG/nc9.lus
new file mode 100644
index 00000000..ca742ff1
--- /dev/null
+++ b/src/test/should_work/NONREG/nc9.lus
@@ -0,0 +1,39 @@
+-- Appel de noeuds avec sortie multiple
+-- Attention : les deux appels de n2 dans n1 se reduisent
+--             a un appel avec lus2dc.
+
+node nc9 (nc9e1:int) returns (ok:bool);
+var nc9b1:int;
+let
+
+	nc9b1 = n1(nc9e1);
+	
+	ok = (nc9b1 = nc9e1*16);
+
+tel
+
+
+
+
+node n1(n1e1:int) returns (n1s:int);
+let
+	n1s = n2(n1e1,n1e1) + n2(n1e1,n1e1);				
+tel
+
+node n2(n2e1,n2e2:int) returns (n2s:int);
+let
+	n2s = n3(n2e1,n2e1) + n3(n2e2,n2e2);				
+tel
+
+node n3(n3e1,n3e2:int) returns (n3s:int);
+var n3i1,n3i2:int;
+let
+	(n3i1, n3i2) = n4(n3e1,n3e1,n3e2,n3e2);	
+	n3s = n3i1 + n3i2;				
+tel
+
+node n4(n4e1,n4e2,n4e3,n4e4:int) returns (n4s1,n4s2:int);
+let
+	n4s1 = n4e1 + n4e2 ;
+	n4s2 = n4e3 + n4e4 ;			
+tel
diff --git a/src/test/should_work/NONREG/node_caller1.lus b/src/test/should_work/NONREG/node_caller1.lus
new file mode 100644
index 00000000..d63f1922
--- /dev/null
+++ b/src/test/should_work/NONREG/node_caller1.lus
@@ -0,0 +1,30 @@
+
+node node_caller1 (a:int) returns (b:int);
+ let
+	 b = ex1(a);
+ tel;
+
+node ex1(a:int) returns (b:int);
+ let
+	 b = ex2(a) + 1;
+ tel;
+
+node ex2(a:int) returns (b:int);
+ let
+	 b = ex3(a) + 2;
+ tel;
+
+node ex3(a:int) returns (b:int);
+ let
+	 b = ex4(a) + 3;
+ tel;
+
+node ex4(a:int) returns (b:int);
+ let
+	 b = ex5(a) + 4;
+ tel;
+
+node ex5(a:int) returns (b:int);
+ let
+	 b = a - 700000;
+ tel;
diff --git a/src/test/should_work/NONREG/o2l_feux_compl.lus b/src/test/should_work/NONREG/o2l_feux_compl.lus
new file mode 100644
index 00000000..63689cc6
--- /dev/null
+++ b/src/test/should_work/NONREG/o2l_feux_compl.lus
@@ -0,0 +1,1487 @@
+node o2l_feux_compl (
+  TD,
+  TI,
+  CP,
+  AB,
+  LP : bool)
+returns(
+  veilleuses,
+  codes,
+  phares,
+  anti_b,
+  longue_p : bool);
+var
+  o2l_A_0, o2l_P_0,
+  o2l_A_1, o2l_P_1,
+  o2l_A_2, o2l_P_2,
+  o2l_A_3, o2l_P_3,
+  o2l_A_4, o2l_P_4,
+  o2l_A_5, o2l_P_5,
+  o2l_A_6, o2l_P_6,
+  o2l_A_7, o2l_P_7,
+  o2l_A_8, o2l_P_8,
+  o2l_A_9, o2l_P_9,
+  o2l_A_10, o2l_P_10,
+  o2l_A_11, o2l_P_11,
+  o2l_A_12, o2l_P_12,
+  o2l_A_13, o2l_P_13,
+  o2l_A_14, o2l_P_14,
+  o2l_A_15, o2l_P_15: bool;
+let
+  assert #(
+    o2l_A_0, 
+    o2l_A_1, 
+    o2l_A_2, 
+    o2l_A_3, 
+    o2l_A_4, 
+    o2l_A_5, 
+    o2l_A_6, 
+    o2l_A_7, 
+    o2l_A_8, 
+    o2l_A_9, 
+    o2l_A_10, 
+    o2l_A_11, 
+    o2l_A_12, 
+    o2l_A_13, 
+    o2l_A_14, 
+    o2l_A_15);
+
+  assert #(
+    o2l_P_0, 
+    o2l_P_1, 
+    o2l_P_2, 
+    o2l_P_3, 
+    o2l_P_4, 
+    o2l_P_5, 
+    o2l_P_6, 
+    o2l_P_7, 
+    o2l_P_8, 
+    o2l_P_9, 
+    o2l_P_10, 
+    o2l_P_11, 
+    o2l_P_12, 
+    o2l_P_13, 
+    o2l_P_14, 
+    o2l_P_15);
+
+  o2l_P_0 = true -> pre o2l_A_0;
+
+  o2l_A_0 = 
+      o2l_P_0 and
+      not TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_1 and
+      not TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_2 and
+      not TD and 
+      AB and 
+      LP
+    or
+      o2l_P_3 and
+      not TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_4 and
+      TI and 
+      (if TD
+       then
+         AB and 
+         LP
+       else
+         AB and 
+         LP)
+    or
+      o2l_P_5 and
+      TI and 
+      (if TD
+       then
+         AB and 
+         not LP
+       else
+         AB and 
+         not LP)
+    or
+      o2l_P_6 and
+      TI and 
+      (if TD
+       then
+         not AB and 
+         LP
+       else
+         not AB and 
+         LP)
+    or
+      o2l_P_7 and
+      TI and 
+      (if TD
+       then
+         not AB and 
+         not LP
+       else
+         not AB and 
+         not LP);
+
+  o2l_P_1 = false -> pre o2l_A_1;
+
+  o2l_A_1 = 
+      o2l_P_0 and
+      not TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_1 and
+      not TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_2 and
+      not TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_3 and
+      not TD and 
+      AB and 
+      LP
+    or
+      o2l_P_4 and
+      TI and 
+      (if TD
+       then
+         AB and 
+         not LP
+       else
+         AB and 
+         not LP)
+    or
+      o2l_P_5 and
+      TI and 
+      (if TD
+       then
+         AB and 
+         LP
+       else
+         AB and 
+         LP)
+    or
+      o2l_P_6 and
+      TI and 
+      (if TD
+       then
+         not AB and 
+         not LP
+       else
+         not AB and 
+         not LP)
+    or
+      o2l_P_7 and
+      TI and 
+      (if TD
+       then
+         not AB and 
+         LP
+       else
+         not AB and 
+         LP);
+
+  o2l_P_2 = false -> pre o2l_A_2;
+
+  o2l_A_2 = 
+      o2l_P_0 and
+      not TD and 
+      AB and 
+      LP
+    or
+      o2l_P_1 and
+      not TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_2 and
+      not TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_3 and
+      not TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_4 and
+      TI and 
+      (if TD
+       then
+         not AB and 
+         not LP
+       else
+         not AB and 
+         not LP)
+    or
+      o2l_P_5 and
+      TI and 
+      (if TD
+       then
+         not AB and 
+         LP
+       else
+         not AB and 
+         LP)
+    or
+      o2l_P_6 and
+      TI and 
+      (if TD
+       then
+         AB and 
+         not LP
+       else
+         AB and 
+         not LP)
+    or
+      o2l_P_7 and
+      TI and 
+      (if TD
+       then
+         AB and 
+         LP
+       else
+         AB and 
+         LP);
+
+  o2l_P_3 = false -> pre o2l_A_3;
+
+  o2l_A_3 = 
+      o2l_P_0 and
+      not TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_1 and
+      not TD and 
+      AB and 
+      LP
+    or
+      o2l_P_2 and
+      not TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_3 and
+      not TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_4 and
+      TI and 
+      (if TD
+       then
+         not AB and 
+         LP
+       else
+         not AB and 
+         LP)
+    or
+      o2l_P_5 and
+      TI and 
+      (if TD
+       then
+         not AB and 
+         not LP
+       else
+         not AB and 
+         not LP)
+    or
+      o2l_P_6 and
+      TI and 
+      (if TD
+       then
+         AB and 
+         LP
+       else
+         AB and 
+         LP)
+    or
+      o2l_P_7 and
+      TI and 
+      (if TD
+       then
+         AB and 
+         not LP
+       else
+         AB and 
+         not LP);
+
+  o2l_P_4 = false -> pre o2l_A_4;
+
+  o2l_A_4 = 
+      o2l_P_0 and
+      TD and 
+      AB and 
+      LP
+    or
+      o2l_P_1 and
+      TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_2 and
+      TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_3 and
+      TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_4 and
+      not TI and 
+      not TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_5 and
+      not TI and 
+      not TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_6 and
+      not TI and 
+      not TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_7 and
+      not TI and 
+      not TD and 
+      AB and 
+      LP
+    or
+      o2l_P_8 and
+      TI and 
+      (if CP
+       then
+         not AB and 
+         not LP
+       else
+         not AB and 
+         not LP)
+    or
+      o2l_P_9 and
+      TI and 
+      (if CP
+       then
+         not AB and 
+         LP
+       else
+         not AB and 
+         LP)
+    or
+      o2l_P_10 and
+      TI and 
+      (if CP
+       then
+         AB and 
+         not LP
+       else
+         AB and 
+         not LP)
+    or
+      o2l_P_11 and
+      TI and 
+      (if CP
+       then
+         AB and 
+         LP
+       else
+         AB and 
+         LP)
+    or
+      o2l_P_12 and
+      TI and 
+      not AB and 
+      not LP
+    or
+      o2l_P_13 and
+      TI and 
+      not AB and 
+      LP
+    or
+      o2l_P_14 and
+      TI and 
+      AB and 
+      not LP
+    or
+      o2l_P_15 and
+      TI and 
+      AB and 
+      LP;
+
+  o2l_P_5 = false -> pre o2l_A_5;
+
+  o2l_A_5 = 
+      o2l_P_0 and
+      TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_1 and
+      TD and 
+      AB and 
+      LP
+    or
+      o2l_P_2 and
+      TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_3 and
+      TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_4 and
+      not TI and 
+      not TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_5 and
+      not TI and 
+      not TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_6 and
+      not TI and 
+      not TD and 
+      AB and 
+      LP
+    or
+      o2l_P_7 and
+      not TI and 
+      not TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_8 and
+      TI and 
+      (if CP
+       then
+         not AB and 
+         LP
+       else
+         not AB and 
+         LP)
+    or
+      o2l_P_9 and
+      TI and 
+      (if CP
+       then
+         not AB and 
+         not LP
+       else
+         not AB and 
+         not LP)
+    or
+      o2l_P_10 and
+      TI and 
+      (if CP
+       then
+         AB and 
+         LP
+       else
+         AB and 
+         LP)
+    or
+      o2l_P_11 and
+      TI and 
+      (if CP
+       then
+         AB and 
+         not LP
+       else
+         AB and 
+         not LP)
+    or
+      o2l_P_12 and
+      TI and 
+      not AB and 
+      LP
+    or
+      o2l_P_13 and
+      TI and 
+      not AB and 
+      not LP
+    or
+      o2l_P_14 and
+      TI and 
+      AB and 
+      LP
+    or
+      o2l_P_15 and
+      TI and 
+      AB and 
+      not LP;
+
+  o2l_P_6 = false -> pre o2l_A_6;
+
+  o2l_A_6 = 
+      o2l_P_0 and
+      TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_1 and
+      TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_2 and
+      TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_3 and
+      TD and 
+      AB and 
+      LP
+    or
+      o2l_P_4 and
+      not TI and 
+      not TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_5 and
+      not TI and 
+      not TD and 
+      AB and 
+      LP
+    or
+      o2l_P_6 and
+      not TI and 
+      not TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_7 and
+      not TI and 
+      not TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_8 and
+      TI and 
+      (if CP
+       then
+         AB and 
+         not LP
+       else
+         AB and 
+         not LP)
+    or
+      o2l_P_9 and
+      TI and 
+      (if CP
+       then
+         AB and 
+         LP
+       else
+         AB and 
+         LP)
+    or
+      o2l_P_10 and
+      TI and 
+      (if CP
+       then
+         not AB and 
+         not LP
+       else
+         not AB and 
+         not LP)
+    or
+      o2l_P_11 and
+      TI and 
+      (if CP
+       then
+         not AB and 
+         LP
+       else
+         not AB and 
+         LP)
+    or
+      o2l_P_12 and
+      TI and 
+      AB and 
+      not LP
+    or
+      o2l_P_13 and
+      TI and 
+      AB and 
+      LP
+    or
+      o2l_P_14 and
+      TI and 
+      not AB and 
+      not LP
+    or
+      o2l_P_15 and
+      TI and 
+      not AB and 
+      LP;
+
+  o2l_P_7 = false -> pre o2l_A_7;
+
+  o2l_A_7 = 
+      o2l_P_0 and
+      TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_1 and
+      TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_2 and
+      TD and 
+      AB and 
+      LP
+    or
+      o2l_P_3 and
+      TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_4 and
+      not TI and 
+      not TD and 
+      AB and 
+      LP
+    or
+      o2l_P_5 and
+      not TI and 
+      not TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_6 and
+      not TI and 
+      not TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_7 and
+      not TI and 
+      not TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_8 and
+      TI and 
+      (if CP
+       then
+         AB and 
+         LP
+       else
+         AB and 
+         LP)
+    or
+      o2l_P_9 and
+      TI and 
+      (if CP
+       then
+         AB and 
+         not LP
+       else
+         AB and 
+         not LP)
+    or
+      o2l_P_10 and
+      TI and 
+      (if CP
+       then
+         not AB and 
+         LP
+       else
+         not AB and 
+         LP)
+    or
+      o2l_P_11 and
+      TI and 
+      (if CP
+       then
+         not AB and 
+         not LP
+       else
+         not AB and 
+         not LP)
+    or
+      o2l_P_12 and
+      TI and 
+      AB and 
+      LP
+    or
+      o2l_P_13 and
+      TI and 
+      AB and 
+      not LP
+    or
+      o2l_P_14 and
+      TI and 
+      not AB and 
+      LP
+    or
+      o2l_P_15 and
+      TI and 
+      not AB and 
+      not LP;
+
+  o2l_P_8 = false -> pre o2l_A_8;
+
+  o2l_A_8 = 
+      o2l_P_4 and
+      not TI and 
+      TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_5 and
+      not TI and 
+      TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_6 and
+      not TI and 
+      TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_7 and
+      not TI and 
+      TD and 
+      AB and 
+      LP
+    or
+      o2l_P_8 and
+      not TI and 
+      not CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_9 and
+      not TI and 
+      not CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_10 and
+      not TI and 
+      not CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_11 and
+      not TI and 
+      not CP and 
+      AB and 
+      LP
+    or
+      o2l_P_12 and
+      not TI and 
+      CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_13 and
+      not TI and 
+      CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_14 and
+      not TI and 
+      CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_15 and
+      not TI and 
+      CP and 
+      AB and 
+      LP;
+
+  o2l_P_9 = false -> pre o2l_A_9;
+
+  o2l_A_9 = 
+      o2l_P_4 and
+      not TI and 
+      TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_5 and
+      not TI and 
+      TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_6 and
+      not TI and 
+      TD and 
+      AB and 
+      LP
+    or
+      o2l_P_7 and
+      not TI and 
+      TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_8 and
+      not TI and 
+      not CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_9 and
+      not TI and 
+      not CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_10 and
+      not TI and 
+      not CP and 
+      AB and 
+      LP
+    or
+      o2l_P_11 and
+      not TI and 
+      not CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_12 and
+      not TI and 
+      CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_13 and
+      not TI and 
+      CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_14 and
+      not TI and 
+      CP and 
+      AB and 
+      LP
+    or
+      o2l_P_15 and
+      not TI and 
+      CP and 
+      AB and 
+      not LP;
+
+  o2l_P_10 = false -> pre o2l_A_10;
+
+  o2l_A_10 = 
+      o2l_P_4 and
+      not TI and 
+      TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_5 and
+      not TI and 
+      TD and 
+      AB and 
+      LP
+    or
+      o2l_P_6 and
+      not TI and 
+      TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_7 and
+      not TI and 
+      TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_8 and
+      not TI and 
+      not CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_9 and
+      not TI and 
+      not CP and 
+      AB and 
+      LP
+    or
+      o2l_P_10 and
+      not TI and 
+      not CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_11 and
+      not TI and 
+      not CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_12 and
+      not TI and 
+      CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_13 and
+      not TI and 
+      CP and 
+      AB and 
+      LP
+    or
+      o2l_P_14 and
+      not TI and 
+      CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_15 and
+      not TI and 
+      CP and 
+      not AB and 
+      LP;
+
+  o2l_P_11 = false -> pre o2l_A_11;
+
+  o2l_A_11 = 
+      o2l_P_4 and
+      not TI and 
+      TD and 
+      AB and 
+      LP
+    or
+      o2l_P_5 and
+      not TI and 
+      TD and 
+      AB and 
+      not LP
+    or
+      o2l_P_6 and
+      not TI and 
+      TD and 
+      not AB and 
+      LP
+    or
+      o2l_P_7 and
+      not TI and 
+      TD and 
+      not AB and 
+      not LP
+    or
+      o2l_P_8 and
+      not TI and 
+      not CP and 
+      AB and 
+      LP
+    or
+      o2l_P_9 and
+      not TI and 
+      not CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_10 and
+      not TI and 
+      not CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_11 and
+      not TI and 
+      not CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_12 and
+      not TI and 
+      CP and 
+      AB and 
+      LP
+    or
+      o2l_P_13 and
+      not TI and 
+      CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_14 and
+      not TI and 
+      CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_15 and
+      not TI and 
+      CP and 
+      not AB and 
+      not LP;
+
+  o2l_P_12 = false -> pre o2l_A_12;
+
+  o2l_A_12 = 
+      o2l_P_8 and
+      not TI and 
+      CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_9 and
+      not TI and 
+      CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_10 and
+      not TI and 
+      CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_11 and
+      not TI and 
+      CP and 
+      AB and 
+      LP
+    or
+      o2l_P_12 and
+      not TI and 
+      not CP and 
+      not LP and 
+      not AB
+    or
+      o2l_P_13 and
+      not TI and 
+      not CP and 
+      LP and 
+      not AB
+    or
+      o2l_P_14 and
+      not TI and 
+      not CP and 
+      not LP and 
+      AB
+    or
+      o2l_P_15 and
+      not TI and 
+      not CP and 
+      LP and 
+      AB;
+
+  o2l_P_13 = false -> pre o2l_A_13;
+
+  o2l_A_13 = 
+      o2l_P_8 and
+      not TI and 
+      CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_9 and
+      not TI and 
+      CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_10 and
+      not TI and 
+      CP and 
+      AB and 
+      LP
+    or
+      o2l_P_11 and
+      not TI and 
+      CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_12 and
+      not TI and 
+      not CP and 
+      LP and 
+      not AB
+    or
+      o2l_P_13 and
+      not TI and 
+      not CP and 
+      not LP and 
+      not AB
+    or
+      o2l_P_14 and
+      not TI and 
+      not CP and 
+      LP and 
+      AB
+    or
+      o2l_P_15 and
+      not TI and 
+      not CP and 
+      not LP and 
+      AB;
+
+  o2l_P_14 = false -> pre o2l_A_14;
+
+  o2l_A_14 = 
+      o2l_P_8 and
+      not TI and 
+      CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_9 and
+      not TI and 
+      CP and 
+      AB and 
+      LP
+    or
+      o2l_P_10 and
+      not TI and 
+      CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_11 and
+      not TI and 
+      CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_12 and
+      not TI and 
+      not CP and 
+      not LP and 
+      AB
+    or
+      o2l_P_13 and
+      not TI and 
+      not CP and 
+      LP and 
+      AB
+    or
+      o2l_P_14 and
+      not TI and 
+      not CP and 
+      not LP and 
+      not AB
+    or
+      o2l_P_15 and
+      not TI and 
+      not CP and 
+      LP and 
+      not AB;
+
+  o2l_P_15 = false -> pre o2l_A_15;
+
+  o2l_A_15 = 
+      o2l_P_8 and
+      not TI and 
+      CP and 
+      AB and 
+      LP
+    or
+      o2l_P_9 and
+      not TI and 
+      CP and 
+      AB and 
+      not LP
+    or
+      o2l_P_10 and
+      not TI and 
+      CP and 
+      not AB and 
+      LP
+    or
+      o2l_P_11 and
+      not TI and 
+      CP and 
+      not AB and 
+      not LP
+    or
+      o2l_P_12 and
+      not TI and 
+      not CP and 
+      LP and 
+      AB
+    or
+      o2l_P_13 and
+      not TI and 
+      not CP and 
+      not LP and 
+      AB
+    or
+      o2l_P_14 and
+      not TI and 
+      not CP and 
+      LP and 
+      not AB
+    or
+      o2l_P_15 and
+      not TI and 
+      not CP and 
+      not LP and 
+      not AB;
+
+  veilleuses = 
+      o2l_P_0 and
+      TD
+    or
+      o2l_P_1 and
+      TD
+    or
+      o2l_P_2 and
+      TD
+    or
+      o2l_P_3 and
+      TD
+    or
+      o2l_P_4 and
+      not TI and 
+      not TD
+    or
+      o2l_P_5 and
+      not TI and 
+      not TD
+    or
+      o2l_P_6 and
+      not TI and 
+      not TD
+    or
+      o2l_P_7 and
+      not TI and 
+      not TD
+    or
+      o2l_P_8 and
+      TI
+    or
+      o2l_P_9 and
+      TI
+    or
+      o2l_P_10 and
+      TI
+    or
+      o2l_P_11 and
+      TI
+    or
+      o2l_P_12 and
+      TI
+    or
+      o2l_P_13 and
+      TI
+    or
+      o2l_P_14 and
+      TI
+    or
+      o2l_P_15 and
+      TI;
+
+  codes = 
+      o2l_P_4 and
+      (if TI
+       then
+         TD
+       else
+         TD)
+    or
+      o2l_P_5 and
+      (if TI
+       then
+         TD
+       else
+         TD)
+    or
+      o2l_P_6 and
+      (if TI
+       then
+         TD
+       else
+         TD)
+    or
+      o2l_P_7 and
+      (if TI
+       then
+         TD
+       else
+         TD)
+    or
+      o2l_P_8 and
+      not TI and 
+      not CP
+    or
+      o2l_P_9 and
+      not TI and 
+      not CP
+    or
+      o2l_P_10 and
+      not TI and 
+      not CP
+    or
+      o2l_P_11 and
+      not TI and 
+      not CP
+    or
+      o2l_P_12 and
+      not TI and 
+      CP
+    or
+      o2l_P_13 and
+      not TI and 
+      CP
+    or
+      o2l_P_14 and
+      not TI and 
+      CP
+    or
+      o2l_P_15 and
+      not TI and 
+      CP;
+
+  phares = 
+      o2l_P_8 and
+      (if TI
+       then
+         CP
+       else
+         CP)
+    or
+      o2l_P_9 and
+      (if TI
+       then
+         CP
+       else
+         CP)
+    or
+      o2l_P_10 and
+      (if TI
+       then
+         CP
+       else
+         CP)
+    or
+      o2l_P_11 and
+      (if TI
+       then
+         CP
+       else
+         CP)
+    or
+      o2l_P_12 and
+      not TI and 
+      not CP
+    or
+      o2l_P_13 and
+      not TI and 
+      not CP
+    or
+      o2l_P_14 and
+      not TI and 
+      not CP
+    or
+      o2l_P_15 and
+      not TI and 
+      not CP;
+
+  anti_b = 
+      o2l_P_4 and
+      (if TI
+       then
+         TD
+       else
+         TD)
+    or
+      o2l_P_5 and
+      (if TI
+       then
+         TD
+       else
+         TD)
+    or
+      o2l_P_8 and
+      not TI and 
+      not CP and 
+      not AB
+    or
+      o2l_P_9 and
+      not TI and 
+      not CP and 
+      not AB
+    or
+      o2l_P_10 and
+      not TI and 
+      not CP and 
+      AB
+    or
+      o2l_P_11 and
+      not TI and 
+      not CP and 
+      AB
+    or
+      o2l_P_12 and
+      not TI and 
+      CP
+    or
+      o2l_P_13 and
+      not TI and 
+      CP;
+
+  longue_p = 
+      o2l_P_8 and
+      (if TI
+       then
+         CP
+       else
+         CP)
+    or
+      o2l_P_10 and
+      (if TI
+       then
+         CP
+       else
+         CP)
+    or
+      o2l_P_12 and
+      not TI and 
+      not CP and 
+      not LP
+    or
+      o2l_P_13 and
+      not TI and 
+      not CP and 
+      LP
+    or
+      o2l_P_14 and
+      not TI and 
+      not CP and 
+      not LP
+    or
+      o2l_P_15 and
+      not TI and 
+      not CP and 
+      LP;
+tel
diff --git a/src/test/should_work/NONREG/patrick.lus b/src/test/should_work/NONREG/patrick.lus
new file mode 100644
index 00000000..3f767836
--- /dev/null
+++ b/src/test/should_work/NONREG/patrick.lus
@@ -0,0 +1,6 @@
+
+node patrick (a,b:int; c,d: bool) 
+returns (s:int);
+let
+	s = if c then a else 1 + if d then b else 4;
+tel
diff --git a/src/test/should_work/NONREG/poussoir.lus b/src/test/should_work/NONREG/poussoir.lus
new file mode 100644
index 00000000..e689ade3
--- /dev/null
+++ b/src/test/should_work/NONREG/poussoir.lus
@@ -0,0 +1,18 @@
+node TWO_STATES(set,reset,init:bool) returns (state:bool);
+let
+	state = init -> if set and not pre(state) then true
+						else if reset and pre(state) then false
+						else pre(state);
+tel
+
+node ONE_BUTTON(change,init: bool) returns (state:bool);
+let
+	state = init -> if change then not pre(state) else pre(state);
+tel
+
+
+node poussoir (e3,init:bool) returns (s3, s4:bool);
+let
+	s3 = TWO_STATES(e3,e3,init);
+	s4 = ONE_BUTTON(e3,init);
+tel
diff --git a/src/test/should_work/NONREG/rs.lus b/src/test/should_work/NONREG/rs.lus
new file mode 100644
index 00000000..fd5c9352
--- /dev/null
+++ b/src/test/should_work/NONREG/rs.lus
@@ -0,0 +1,6 @@
+node rs(r,s:bool) returns(q:bool);
+var n: bool;
+let
+   q = false -> not pre(r) and not pre(n);
+   n = true -> not pre(s) and not pre(q);
+tel
diff --git a/src/test/should_work/NONREG/s.lus b/src/test/should_work/NONREG/s.lus
new file mode 100644
index 00000000..b2bbd84b
--- /dev/null
+++ b/src/test/should_work/NONREG/s.lus
@@ -0,0 +1,5 @@
+node s (a,b:int) returns (t:int);
+let
+  assert a=0;
+	t=b;
+tel
diff --git a/src/test/should_work/NONREG/simple.lus b/src/test/should_work/NONREG/simple.lus
new file mode 100644
index 00000000..267ec45c
--- /dev/null
+++ b/src/test/should_work/NONREG/simple.lus
@@ -0,0 +1,23 @@
+type T=int;
+type U = {a:int; b:{x:S; y:T}};
+type S;
+type V = U^4;
+type W = T^(size+2);
+
+const c = true;
+const size = 16;
+const pi = 3.1416;
+const right = pi/2.;
+const u = #(true, false, true);
+
+function f1 (x: int) returns (y: int);
+
+function f2 (u,v: int) returns (s: int; t: bool);
+
+node simple(e:bool; a:{x:int,z:int}) returns (b: int);
+var x: int;
+let x=a.x;
+	b= x+1;
+	assert e or (a.x=0);
+tel
+
diff --git a/src/test/should_work/NONREG/stopwatch.lus b/src/test/should_work/NONREG/stopwatch.lus
new file mode 100644
index 00000000..6d6aa2ac
--- /dev/null
+++ b/src/test/should_work/NONREG/stopwatch.lus
@@ -0,0 +1,26 @@
+node simple_stopwatch
+  (time_unit: bool; reset, start_stop: bool)
+returns
+  (time: int; running: bool);
+let
+  time = 0 -> if reset then 0
+              else if running and time_unit then pre(time)+1
+              else pre(time);
+  running = false -> if start_stop then not pre(running)
+                     else pre(running);
+tel
+
+node stopwatch
+  (time_unit: bool; b1, b2: bool)
+returns (time: int);
+var running, frozen, start_stop, reset, lap: bool; 
+    internal_time: int;
+let
+  (internal_time,running) = 
+      simple_stopwatch(time_unit, reset, start_stop);
+  frozen = false -> if lap then not pre(frozen) else pre(frozen);
+  start_stop = b1;
+  reset = b2 and (true-> not pre(running or frozen));
+  lap = b2 and (false -> pre(running or frozen));
+  time = if frozen then pre(time) else internal_time;
+tel
diff --git a/src/test/should_work/NONREG/test.exp b/src/test/should_work/NONREG/test.exp
new file mode 100644
index 00000000..2708bbbc
--- /dev/null
+++ b/src/test/should_work/NONREG/test.exp
@@ -0,0 +1 @@
+activation_ec after alarme arbitre argos assertion aux1 aux bascule call ck2 ck3 ck4 ck5 ck6 ck7 clock cminus compteur cpt cst CURRENT deconne dependeur dependeur_struct dep drapfab eq1 exclusion ex fby flo hanane import1 initial long_et_stupide_nom_de_noeud minmax1 minmax2 minmax3 minmax4_bis minmax4 minmax5 minmax5_random minmax6 mm1 mm22 mm3 mm mouse1 mouse2 mouse3 mouse multiclock nc10 nc1 nc2 nc3 nc4 nc5 nc6 nc7 nc8 nc9 node_caller1 _N_uu o2l_feux_compl patrick PCOND1 PCOND poussoir rs simple s SOURIS stopwatch testCA trivial2 trivial uu v1 Watch X1 X2 X3 X6 X 
\ No newline at end of file
diff --git a/src/test/should_work/NONREG/test.res b/src/test/should_work/NONREG/test.res
new file mode 100644
index 00000000..92941652
--- /dev/null
+++ b/src/test/should_work/NONREG/test.res
@@ -0,0 +1 @@
+CURRENT PCOND PCOND1 SOURIS Watch X X1 X2 X3 X6 _N_uu activation_ec after alarme arbitre argos assertion aux aux1 bascule call ck2 ck3 ck4 ck5 ck6 ck7 clock cminus compteur cpt cst deconne dep dependeur dependeur_struct drapfab eq1 ex exclusion fby flo hanane import1 initial long_et_stupide_nom_de_noeud minmax1 minmax2 minmax3 minmax4 minmax4_bis minmax5 minmax5_random minmax6 mm mm1 mm22 mm3 mouse mouse1 mouse2 mouse3 multiclock nc1 nc10 nc2 nc3 nc4 nc5 nc6 nc7 nc8 nc9 node_caller1 o2l_feux_compl patrick poussoir rs s simple stopwatch testCA trivial trivial2 uu v1 
\ No newline at end of file
diff --git a/src/test/should_work/NONREG/testCA.lus b/src/test/should_work/NONREG/testCA.lus
new file mode 100644
index 00000000..890436d7
--- /dev/null
+++ b/src/test/should_work/NONREG/testCA.lus
@@ -0,0 +1,23 @@
+(*  This file is a trivial test for "activation condition and nodecall *)
+
+node testCA(
+		time_in_ms:int -- time of the day in millisecond from 00:00
+		) returns (
+			hour:int;
+			minute:int;
+			second:int;
+			ms:int
+			);
+var
+	time_in_min: int;
+	time_in_second: int;
+let
+	
+	hour = time_in_min div 60 ;
+	minute = time_in_min mod 60 ;
+	time_in_min = time_in_second div 60 ;
+	second = time_in_second mod 60 ;
+	time_in_second = time_in_ms div 1000 ;
+	ms = time_in_ms mod 1000 ;
+	
+tel
diff --git a/src/test/should_work/NONREG/trivial.lus b/src/test/should_work/NONREG/trivial.lus
new file mode 100644
index 00000000..462cb43a
--- /dev/null
+++ b/src/test/should_work/NONREG/trivial.lus
@@ -0,0 +1,8 @@
+node trivial(x:bool) returns (y: bool);
+let
+	y = edge(x);
+tel
+
+
+node edge(x:bool) returns (e: bool);
+let e = false -> x and not pre x; tel
diff --git a/src/test/should_work/NONREG/trivial2.lus b/src/test/should_work/NONREG/trivial2.lus
new file mode 100644
index 00000000..52dd910b
--- /dev/null
+++ b/src/test/should_work/NONREG/trivial2.lus
@@ -0,0 +1,8 @@
+node trivial2(x:bool) returns (y: bool);
+let
+	y = edge(edge(x));
+tel
+
+
+node edge(x:bool) returns (e: bool);
+let e = false -> x and not pre x; tel
diff --git a/src/test/should_work/NONREG/uu.lus b/src/test/should_work/NONREG/uu.lus
new file mode 100644
index 00000000..1708f0a9
--- /dev/null
+++ b/src/test/should_work/NONREG/uu.lus
@@ -0,0 +1,27 @@
+node uu
+  (x: bool; y: bool; z: bool)
+returns
+  (a: bool);
+
+var
+  V112_X: bool; V111_X: bool; V119_X: bool; 
+  V118_X: bool; V126_X: bool; V125_X: bool; 
+  V135_A_forbiden: bool; V136_B_forbiden: bool;
+
+let
+  a = ((not (V111_X and V135_A_forbiden)) and (not (V125_X and V136_B_forbiden)
+  ));
+  V112_X = (false -> (pre (y or V112_X)));
+  V111_X = (if y then x else (if V112_X then (x or (pre V111_X)) else true));
+  V119_X = (false -> (pre (y or V119_X)));
+  V118_X = (if y then x else (if V119_X then (x and (pre V118_X)) else true));
+  V126_X = (false -> (pre (V118_X or V126_X)));
+  V125_X = (if V118_X then z else (if V126_X then (z or (pre V125_X)) else true
+  ));
+  V135_A_forbiden = (false -> (if ((pre V111_X) and (not V111_X)) then true 
+  else (if ((pre V125_X) and (not V125_X)) then false else (pre V135_A_forbiden
+  ))));
+  V136_B_forbiden = (true -> (if ((pre V125_X) and (not V125_X)) then true else 
+  (if ((pre V111_X) and (not V111_X)) then false else (pre V136_B_forbiden))));
+tel
+
diff --git a/src/test/should_work/NONREG/v1.lus b/src/test/should_work/NONREG/v1.lus
new file mode 100644
index 00000000..a3eaf596
--- /dev/null
+++ b/src/test/should_work/NONREG/v1.lus
@@ -0,0 +1,4 @@
+node v1 (m: int; b: bool) returns (n: int);
+let n = if b then m else m-1;
+tel
+
diff --git a/src/test/consensus.lus b/src/test/should_work/Pascal/consensus.lus
similarity index 100%
rename from src/test/consensus.lus
rename to src/test/should_work/Pascal/consensus.lus
diff --git a/src/test/fby.lus b/src/test/should_work/Pascal/fby.lus
similarity index 100%
rename from src/test/fby.lus
rename to src/test/should_work/Pascal/fby.lus
diff --git a/src/test/func_with_body.lus b/src/test/should_work/Pascal/func_with_body.lus
similarity index 100%
rename from src/test/func_with_body.lus
rename to src/test/should_work/Pascal/func_with_body.lus
diff --git a/src/test/heater_control.lus b/src/test/should_work/Pascal/heater_control.lus
similarity index 100%
rename from src/test/heater_control.lus
rename to src/test/should_work/Pascal/heater_control.lus
diff --git a/src/test/left.lus b/src/test/should_work/Pascal/left.lus
similarity index 100%
rename from src/test/left.lus
rename to src/test/should_work/Pascal/left.lus
diff --git a/src/test/newpacks.lus b/src/test/should_work/Pascal/newpacks.lus
similarity index 100%
rename from src/test/newpacks.lus
rename to src/test/should_work/Pascal/newpacks.lus
diff --git a/src/test/onlyroll.lus b/src/test/should_work/Pascal/onlyroll.lus
similarity index 100%
rename from src/test/onlyroll.lus
rename to src/test/should_work/Pascal/onlyroll.lus
diff --git a/src/test/p.lus b/src/test/should_work/Pascal/p.lus
similarity index 100%
rename from src/test/p.lus
rename to src/test/should_work/Pascal/p.lus
diff --git a/src/test/packs.lus b/src/test/should_work/Pascal/packs.lus
similarity index 100%
rename from src/test/packs.lus
rename to src/test/should_work/Pascal/packs.lus
diff --git a/src/test/pfs.lus b/src/test/should_work/Pascal/pfs.lus
similarity index 100%
rename from src/test/pfs.lus
rename to src/test/should_work/Pascal/pfs.lus
diff --git a/src/test/struct0.lus b/src/test/should_work/Pascal/struct0.lus
similarity index 100%
rename from src/test/struct0.lus
rename to src/test/should_work/Pascal/struct0.lus
diff --git a/src/test/t.lus b/src/test/should_work/Pascal/t.lus
similarity index 84%
rename from src/test/t.lus
rename to src/test/should_work/Pascal/t.lus
index 4ef58eae..f69e73d9 100644
--- a/src/test/t.lus
+++ b/src/test/should_work/Pascal/t.lus
@@ -28,6 +28,6 @@ let
 tel
 
 -- not supposed to work...
-const A =
-  [[ 1, 2 ] , [ 3 , 4], [5, 6] ]
-+ [[ 1, 2 ] , [ 3 , 4], [5, 6] ] ;
+-- const A =
+--  [[ 1, 2 ] , [ 3 , 4], [5, 6] ]
+-- + [[ 1, 2 ] , [ 3 , 4], [5, 6] ] ;
diff --git a/src/test/t0.lus b/src/test/should_work/Pascal/t0.lus
similarity index 99%
rename from src/test/t0.lus
rename to src/test/should_work/Pascal/t0.lus
index 82250da4..9c237f85 100644
--- a/src/test/t0.lus
+++ b/src/test/should_work/Pascal/t0.lus
@@ -15,3 +15,4 @@ let
 tel 
 
 node min_4 = min_n<<4>>;
+
diff --git a/src/test/t1.lus b/src/test/should_work/Pascal/t1.lus
similarity index 100%
rename from src/test/t1.lus
rename to src/test/should_work/Pascal/t1.lus
diff --git a/src/test/t2.lus b/src/test/should_work/Pascal/t2.lus
similarity index 100%
rename from src/test/t2.lus
rename to src/test/should_work/Pascal/t2.lus
diff --git a/src/test/test.lus b/src/test/should_work/Pascal/test.lus
similarity index 100%
rename from src/test/test.lus
rename to src/test/should_work/Pascal/test.lus
diff --git a/src/test/trivial.lus b/src/test/should_work/Pascal/trivial.lus
similarity index 100%
rename from src/test/trivial.lus
rename to src/test/should_work/Pascal/trivial.lus
diff --git a/src/test/should_work/call/bad_call02.lus b/src/test/should_work/call/bad_call02.lus
new file mode 100644
index 00000000..b96ec59e
--- /dev/null
+++ b/src/test/should_work/call/bad_call02.lus
@@ -0,0 +1,7 @@
+
+-- clock checking of predefined ops
+
+node bad_call02(a:int; c:bool) returns (x : int);
+let
+	x = Lustre::when(a,c);
+tel 
diff --git a/src/test/should_work/call/call01.lus b/src/test/should_work/call/call01.lus
new file mode 100644
index 00000000..a14c4110
--- /dev/null
+++ b/src/test/should_work/call/call01.lus
@@ -0,0 +1,11 @@
+
+node toto = Lustre::and;
+
+extern function momo(x,y : bool) returns (z : bool);
+
+
+node call01(x,y : bool) returns (z : bool);
+let
+	z = toto(x,y);
+tel
+
diff --git a/src/test/should_work/call/call02.lus b/src/test/should_work/call/call02.lus
new file mode 100644
index 00000000..3e6ec512
--- /dev/null
+++ b/src/test/should_work/call/call02.lus
@@ -0,0 +1,9 @@
+
+node toto = Lustre::and;
+node titi = toto;
+
+node call02(x,y : bool) returns (z : bool);
+let
+	z = titi(x,y);
+tel
+
diff --git a/src/test/should_work/call/call03.lus b/src/test/should_work/call/call03.lus
new file mode 100644
index 00000000..90e3a592
--- /dev/null
+++ b/src/test/should_work/call/call03.lus
@@ -0,0 +1,10 @@
+
+node tutu = map<<or, 2>>;
+
+extern function momo(x,y : bool) returns (z : bool);
+
+
+node call03(x,y : bool^2) returns (z : bool^2);
+let
+	z = tutu(x,y);
+tel
diff --git a/src/test/should_work/call/call04.lus b/src/test/should_work/call/call04.lus
new file mode 100644
index 00000000..6a5ca58d
--- /dev/null
+++ b/src/test/should_work/call/call04.lus
@@ -0,0 +1,9 @@
+
+node toto = Lustre::and;
+node titi = toto;
+node tutu = map<<titi, 2>>;
+
+node call04(x,y : bool^2) returns (z : bool^2);
+let
+	z = tutu(x,y);
+tel
diff --git a/src/test/should_work/call/call05.lus b/src/test/should_work/call/call05.lus
new file mode 100644
index 00000000..289a1275
--- /dev/null
+++ b/src/test/should_work/call/call05.lus
@@ -0,0 +1,6 @@
+extern function momo(x,y : bool) returns (z : bool);
+
+node call05(x,y : bool) returns (z : bool);
+let
+	z = momo(x,y);
+tel
diff --git a/src/test/should_work/call/call06.lus b/src/test/should_work/call/call06.lus
new file mode 100644
index 00000000..c174ddfb
--- /dev/null
+++ b/src/test/should_work/call/call06.lus
@@ -0,0 +1,7 @@
+
+extern function bip(x,y : bool) returns (z,t : bool);
+
+node call06(x,y : bool) returns (z,t : bool);
+let
+	(z,t) = bip(x,y);
+tel
diff --git a/src/test/should_work/call/call07.lus b/src/test/should_work/call/call07.lus
new file mode 100644
index 00000000..3c1fe408
--- /dev/null
+++ b/src/test/should_work/call/call07.lus
@@ -0,0 +1,5 @@
+
+node call07(x,y,z : bool) returns (t : bool);
+let
+	t = #(x,y,z);
+tel
diff --git a/src/test/should_work/demo/Gyroscope2.lus b/src/test/should_work/demo/Gyroscope2.lus
new file mode 100644
index 00000000..2a9ee5c7
--- /dev/null
+++ b/src/test/should_work/demo/Gyroscope2.lus
@@ -0,0 +1,365 @@
+const DELTA_ROLL = 2.0;
+const DELTA_PITCH = 2.0;
+const DELTA_YAW = 2.0;
+const GOD_ROLL = 15.0;
+const GOD_PITCH = 16.0;
+const GOD_YAW = 14.0;
+const DELTA_TO_GOD_ROLL = 2.0;
+const DELTA_TO_GOD_PITCH = 2.0;
+const DELTA_TO_GOD_YAW = 2.0;
+const CROSS_CHANNEL_TOLERANCE = 1.0;
+type Valid_ChannelT={local_failure : bool; local_value : real};
+type Faulty_ChannelT={valuea : real; valueb : real};
+type Faulty_Array=Faulty_ChannelT^4^3;
+type CFF_Eltstruct={indx : int; indx_toChange : int; value : Valid_ChannelT};
+type CFF_struct={indx : int; indx_toChange : int; tabToFill : Valid_ChannelT^3};
+
+
+node countFalse(accu_in : real; elt_in : Valid_ChannelT) returns (accu_out : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   accu_out = if(elt_in.local_failure) then accu_in else (accu_in + 1.0);
+tel
+
+
+node countValidChannels(channels : Valid_ChannelT^4) returns (nb : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   nb = red<<countFalse;4>>(0.0,channels);
+tel
+
+
+node sum(accu_in : real; elt_in : real) returns (accu_out : real);
+-- Assumes : 
+-- var : 
+-- varBidon : real(varBidon < elt_in);
+-- Guarantees : 
+-- var : 
+-- otherVarBidon : real((elt_in + otherVarBidon) < accu_out);
+-- Body : 
+let
+   accu_out = (accu_in + elt_in);
+tel
+
+
+node masking(channel : Valid_ChannelT) returns (out : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   out = if(channel.local_failure) then 0.0 else channel.local_value;
+tel
+
+
+node abs(in : real) returns (out : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   out = if((in < 0.0)) then -(in) else in;
+tel
+
+
+node TooFar(nbToFarIn : int; channel : Faulty_ChannelT; god : real; delta_to_god : real) returns (nbToFarOut : int);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   nbToFarOut = if((abs((channel.valuea - god)) < delta_to_god)) then (nbToFarIn + 1) else nbToFarIn;
+tel
+
+
+
+node assumeVoter(channels : Valid_ChannelT^4; god : real; delta_to_god : real) returns (assumeOK : bool);
+let
+   assumeOK = true;
+tel
+
+
+node iteratedVoter(acc_in :  bool; channel : Valid_ChannelT; god,  delta_to_god, vote : real) returns (acc_out : bool);
+let
+  acc_out = acc_in and (channel.local_failure or (abs((vote - channel.local_value)) < delta_to_god));
+tel
+
+node guaranteeVoter(channels : Valid_ChannelT^4; god : real; delta_to_god : real; vote : real) returns (guaranteeOK : bool);
+let
+  guaranteeOK = red<<iteratedVoter;4>>(true, channels, god^4, delta_to_god^4, vote^4);
+tel
+
+
+
+node Voter(channels : Valid_ChannelT^4; god : real; delta_to_god : real) returns (vote : real)
+%ASSUME:assumeVoter%
+%GUARANTEE:guaranteeVoter%;
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- (channels.local_failure or (abs((vote - channels.local_value)) < delta_to_god));
+-- Body : 
+   var globalSum : real; nbValid : real; mask : real^4; 
+let
+   nbValid = countValidChannels(channels);
+   globalSum = red<<sum;4>>(0.0,mask);
+   vote = (globalSum / nbValid);
+   mask = map<<masking;4>>(channels);
+tel
+
+
+node addOneChannelIter(acc_in : CFF_Eltstruct; elt_in : Valid_ChannelT) returns (acc_out : CFF_Eltstruct; elt_out : Valid_ChannelT);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   acc_out = {indx = (acc_in.indx + 1),
+indx_toChange = acc_in.indx_toChange,
+value = acc_in.value};
+   elt_out = if((acc_in.indx = acc_in.indx_toChange)) then acc_in.value else elt_in;
+tel
+
+
+node addOneChannel(indx_toChange : int; channeltToAdd : Valid_ChannelT; tabToFill : Valid_ChannelT^3) returns (tabToFillAfter : Valid_ChannelT^3);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var acc_out : CFF_Eltstruct; 
+let
+   acc_out,tabToFillAfter = map_red<<addOneChannelIter;3>>({	indx = 0, indx_toChange = indx_toChange,
+								value = channeltToAdd }, tabToFill);
+tel
+
+
+node CFC_iter(structIn : CFF_struct; currentChannel : Valid_ChannelT) returns (structOut : CFF_struct);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   structOut = {indx = (structIn.indx + 1),
+indx_toChange = structIn.indx_toChange,
+tabToFill = if((structIn.indx_toChange = structIn.indx)) then structIn.tabToFill else addOneChannel(structIn.indx, currentChannel, structIn.tabToFill)};
+tel
+
+
+node ComputeForeignChannels(currentChannelIndx : int; allChannels : Valid_ChannelT^4) returns (foreignChannels : Valid_ChannelT^3);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var acc_out : CFF_struct; localtabToFill : Valid_ChannelT; 
+let
+  localtabToFill = {local_failure = false,
+                    local_value = 0.0};
+  acc_out = red<<CFC_iter;4>>({indx = 0,
+                              indx_toChange = currentChannelIndx,
+                              tabToFill = localtabToFill^3},allChannels);
+  foreignChannels = acc_out.tabToFill;
+tel
+
+
+node compare_rolls(acc_in : Valid_ChannelT; channel : Valid_ChannelT) returns (acc_out : Valid_ChannelT; diff : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   acc_out = acc_in;
+   diff = (abs((acc_in.local_value - channel.local_value)) > CROSS_CHANNEL_TOLERANCE);
+tel
+
+
+node selectFailure(from : Valid_ChannelT) returns (failure : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+  failure = from.local_failure;
+tel
+
+
+node values_nok(localChannel : Valid_ChannelT; foreign_Channels : Valid_ChannelT^3) returns (cross_failure : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var diff : bool^3; lc : Valid_ChannelT; 
+let
+  lc,diff = map_red<<compare_rolls;3>>(localChannel,
+                                       foreign_Channels);
+  cross_failure = if(selectFailure(foreign_Channels[0])) 
+                  then if(selectFailure(foreign_Channels[1])) 
+                       then if(selectFailure(foreign_Channels[2])) 
+                            then false 
+                            else diff[2] 
+                       else if(selectFailure(foreign_Channels[2])) 
+                            then diff[1] 
+                            else (diff[1] and diff[2]) 
+                  else if(selectFailure(foreign_Channels[1])) 
+                       then if(selectFailure(foreign_Channels[2])) 
+                            then diff[0] 
+                            else (diff[0] and diff[2]) 
+                       else if(selectFailure(foreign_Channels[2])) 
+                            then (diff[0] and diff[1]) 
+                            else ((diff[0] and diff[1]) and diff[2]);
+tel
+
+
+node CrossFailDetect(currentChannel : int; localChannel : Valid_ChannelT; previousOutChannel : Valid_ChannelT^4) returns (crossFailure : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var foreign_Channels : Valid_ChannelT^3; 
+let
+   foreign_Channels = ComputeForeignChannels(currentChannel, previousOutChannel);
+   crossFailure = values_nok(localChannel, foreign_Channels);
+tel
+
+
+
+
+
+node assumeChannel(previousOutChannel : Valid_ChannelT^4; 
+                   nbInChannel : int;
+                   inChannel : Faulty_ChannelT; 
+                   delta : real; god : real; delta_to_god : real) 
+returns (assumeOK : bool);
+let
+   assumeOK = true;
+tel
+
+
+node guaranteeChannel(previousOutChannel : Valid_ChannelT^4; 
+                      nbInChannel : int;
+                      inChannel : Faulty_ChannelT; 
+                      delta : real; god : real; delta_to_god : real; 
+                      nextOutChannel : Faulty_ChannelT^4; outChannel : Valid_ChannelT) 
+returns (guaranteeOK : bool);
+let
+   guaranteeOK = outChannel.local_failure or ((abs((inChannel.valuea - outChannel.local_value)) < delta) and (abs((inChannel.valueb - outChannel.local_value)) < delta));
+tel
+
+
+
+
+node Channel(previousOutChannel : Valid_ChannelT^4; 
+             nbInChannel : int; 
+             inChannel : Faulty_ChannelT; 
+             delta : real; god : real; delta_to_god : real) 
+returns (nextOutChannel : Valid_ChannelT^4; outChannel : Valid_ChannelT)
+%ASSUME:assumeChannel%
+%GUARANTEE:guaranteeChannel%;
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- (outChannel.local_failure or ((abs((inChannel.valuea - outChannel.local_value)) < delta) and (abs((inChannel.valueb - outChannel.local_value)) < delta)));
+-- Body : 
+   var localChannel : Valid_ChannelT; 
+let
+   localChannel = {local_failure = (abs((inChannel.valuea - inChannel.valueb)) > delta),
+                   local_value = if((abs((inChannel.valuea - inChannel.valueb)) > delta)) then 0.0 else ((inChannel.valuea + inChannel.valueb) / 2.0)};
+   outChannel = {local_failure = (localChannel.local_failure or CrossFailDetect(nbInChannel, localChannel,previousOutChannel)),
+                 local_value = localChannel.local_value};
+   nextOutChannel = previousOutChannel;
+tel
+
+
+
+
+node assumeEvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real) returns (assumeOK : bool);
+var NbToFar : int;
+let
+   NbToFar = red<<TooFar;4>>(0,channels,god^4,delta_to_god^4);
+   assumeOK = NbToFar <= 1;
+tel
+
+
+node guaranteeEvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real; AxisValue : real) returns (guaranteeOK : bool);
+let
+  guaranteeOK = abs((AxisValue - god)) < delta_to_god;
+tel
+
+
+node EvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real) returns (AxisValue : real)
+%ASSUME:assumeEvaluateAxis%
+%GUARANTEE:guaranteeEvaluateAxis%;
+-- Assumes : 
+-- var : 
+-- NbToFar : int((NbToFar = red<<TooFar;4>>(0,channels,god^4,delta_to_god^4)) and (NbToFar <= 1));
+-- Guarantees : 
+-- (abs((AxisValue - god)) < delta_to_god);
+-- Body : 
+   var resChannels : Valid_ChannelT^4; dumbChannel : Valid_ChannelT^4; initChannels : Valid_ChannelT^4; mapredInit : Valid_ChannelT^4; 
+let
+   initChannels = {local_failure = false,
+local_value = 0.0}^4;
+   dumbChannel,resChannels = map_red<<Channel;4>>(mapredInit,[0,1,2,3],channels,delta^4,god^4,delta_to_god^4);
+   AxisValue = Voter(resChannels, god, delta_to_god);
+   mapredInit = (initChannels -> pre(resChannels));
+tel
+
+
+node ValueIsSecure(secure_value : real; delta_to_god_value : real; god_value : real) returns (is_valid : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   is_valid = (abs((secure_value - god_value)) < delta_to_god_value);
+tel
+
+
+node ValueIsSecureII(accu_in : bool; secure_value : real; delta_to_god_value, god_value : real) returns (is_valid : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   is_valid = ((abs((secure_value - god_value)) < 2.0) and accu_in);
+tel
+
+
+node Gyroscope2(axis : Faulty_Array) returns (valid : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var secure_values : real^3; 
+let
+   secure_values = map<<EvaluateAxis;3>>(axis,
+                                         [DELTA_ROLL,DELTA_PITCH,DELTA_YAW],
+                                         [GOD_ROLL,GOD_PITCH,GOD_YAW],
+                                         [DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW]);
+--   valid = forall<<ValueIsSecure;3>>(secure_values,[DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW],[GOD_ROLL,GOD_PITCH,GOD_YAW]);
+   valid = red<<ValueIsSecureII;3>>(true, 
+                                  secure_values, 
+                                  [DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW],
+                                  [GOD_ROLL,GOD_PITCH,GOD_YAW]);
+tel
diff --git a/src/test/should_work/demo/alias.lus b/src/test/should_work/demo/alias.lus
new file mode 100644
index 00000000..4014b5b5
--- /dev/null
+++ b/src/test/should_work/demo/alias.lus
@@ -0,0 +1,50 @@
+--================================================
+--   Ce programme (sans semantique) a pour  
+--   objectif de tester les défintions 
+--   d´"alias".
+--====================================================
+--   Warning: ce test montre la possiblite d''ecrire 
+--   des alias de noeud. La traduction en V4 n'est pas 
+--   termine, ok pour le format Xec.
+--================================================
+
+--================================================
+--        Declaration de constantes
+--================================================
+const SIZE = 3;
+
+--================================================
+--        Le noeud principale
+--================================================
+node alias (a:bool) returns (b:bool; c:int);
+let
+   b = aliasPredefNot(a); 
+   c = aliasGivenNode(0, map<<Lustre::iplus; SIZE>>(0^SIZE, SIZE^SIZE));
+tel
+
+--================================================
+--        Un noeud 
+--================================================
+node unNoeud(a: int; b: int ^ SIZE ) returns (c: int);
+  var x : bool;  
+let
+  c = aliasIterOp(a, b);
+  x = aliasBoolRed([true, false]);
+tel 
+
+--================================================
+--         DEFINITIONS DES ALIAS
+--================================================
+-- alias vers un operateur predefini 
+node aliasPredefNot = Lustre::not;
+
+-- alias vers un noeud défini
+node aliasGivenNode = unNoeud;
+
+-- alias d´un iterateur
+node aliasIterOp = red<<Lustre::iplus; SIZE>>;
+
+-- alias de l´iterateur booleen. 
+node aliasBoolRed = boolred<<0, SIZE-2, SIZE-1>>;
+
+ 
diff --git a/src/test/should_work/demo/bred.lus b/src/test/should_work/demo/bred.lus
new file mode 100644
index 00000000..6ad4036d
--- /dev/null
+++ b/src/test/should_work/demo/bred.lus
@@ -0,0 +1,4 @@
+node bred (a: bool^2) returns (x:bool);
+	let
+		x = boolred<<0,1,2>>(a);
+	tel
diff --git a/src/test/should_work/demo/bred_lv4.lus b/src/test/should_work/demo/bred_lv4.lus
new file mode 100644
index 00000000..a6f20c65
--- /dev/null
+++ b/src/test/should_work/demo/bred_lv4.lus
@@ -0,0 +1,26 @@
+-------------------------------------------- 
+-- File `bred_lv4.lus' generated by 
+-- the lustre-v6 compiler version 0.17
+--------------------------------------------
+
+-------------------------------------------- 
+-- internal type(s) definition(s)  
+-------------------------------------------- 
+type T1_ARRAY = bool^2;
+
+--------------------------------------------
+-- alias types and constant declarations
+--------------------------------------------
+
+-------------------------------------------- 
+-- operator definition 
+-------------------------------------------- 
+node bred(
+ i_a : T1_ARRAY;
+ ) returns ( 
+ o_x : bool;
+ );
+let
+   o_x = br_0_1_2(i_a);
+tel
+
diff --git a/src/test/should_work/demo/clock.lus b/src/test/should_work/demo/clock.lus
new file mode 100644
index 00000000..54708a87
--- /dev/null
+++ b/src/test/should_work/demo/clock.lus
@@ -0,0 +1,27 @@
+
+-- Entee sur entree : 
+---------------------
+extern node clock2(u: bool; v: bool when u) returns (y: bool );
+
+-- Sortie sur sortie : 
+----------------------
+extern node clock3(u: bool) returns (x: bool; y: bool when x );
+
+-- Entree sur entree et sortie sur sortie : 
+-------------------------------------------
+extern node clock4(u: bool; v: bool when u) returns (x: bool; y: bool when x);
+
+-- Noeud principale : 
+---------------------
+node clock(a: bool; b: bool) returns (c: bool; d: bool when c);
+var
+  z: bool;
+  x: bool when z;
+  y: bool when x;
+let 
+  -- c = clock2(a, (b or b) when a) or (true->a); 
+  -- d = clock2(a, b when a) when c;
+  y = clock2(a, b when a) when x;
+  (z, x) = clock3(pre(z));
+  (c, d) = clock4(a, b when a);
+tel
diff --git a/src/test/should_work/demo/clock1_2ms.lus b/src/test/should_work/demo/clock1_2ms.lus
new file mode 100644
index 00000000..4b0a51af
--- /dev/null
+++ b/src/test/should_work/demo/clock1_2ms.lus
@@ -0,0 +1,20 @@
+
+node Clock1ms_node(dummy : bool)
+returns (Clock1ms : bool) ;
+let
+        Clock1ms = true -> ( not pre(Clock1ms) ) ;
+tel
+
+node Clock2ms_node(dummy : bool)
+returns (Clock2ms : bool) ;
+let
+   Clock2ms = true -> ( not pre(Clock2ms) ) ;
+tel
+
+node clock1_2ms(dummy : bool)
+returns (Clock1ms: bool; Clock2ms : bool when Clock1ms) ;
+let
+	Clock1ms = Clock1ms_node(dummy);
+	Clock2ms = Clock2ms_node(dummy when Clock1ms);
+tel
+
diff --git a/src/test/should_work/demo/decl.lus b/src/test/should_work/demo/decl.lus
new file mode 100644
index 00000000..b4e83915
--- /dev/null
+++ b/src/test/should_work/demo/decl.lus
@@ -0,0 +1,39 @@
+---------------
+-- constantes :  
+---------------
+const 
+  a, b, c: int;
+  d = true;
+  e = 8.5;
+  f = blanc;
+  g : int = 4;
+  h = if d then 2 else 3;
+
+----------
+-- types :   
+----------
+type
+  t1, t2, t3;
+  t4 = t1^(2*g);
+  t5 = t4^(2*h+1);
+  coord = {x: real,  y: real};
+  couleur = enum {bleu, blanc, rouge};
+  coord_tab = coord^(2*g-7);
+
+---------------------------------
+-- noeuds et fonctions externes : 
+---------------------------------
+node decl(a1, b1, c1: t1) returns (d1: bool);
+node n2(a1, b1, c1: t4; d1: bool) returns (e1: t5);
+function f1(a1, b1, c1: couleur) returns (d1: bool^h) ;
+
+------------------------------------
+-- quelques erreurs de declaration : 
+------------------------------------
+
+ --const a = 2; -- double decl.
+ --const i = 2*j; -- undefined flow.
+ --const k = f when d; -- forbidden operator in constant expression.
+
+ --type t = int^e; -- array size error.
+ --type  coord2 = {x: real,  x: real}; -- field name error.
diff --git a/src/test/should_work/demo/declaration.lus b/src/test/should_work/demo/declaration.lus
new file mode 100644
index 00000000..ebeeb1cb
--- /dev/null
+++ b/src/test/should_work/demo/declaration.lus
@@ -0,0 +1,47 @@
+-- constantes 
+const 
+  a, b, c: int;
+  d = true;
+  e = 8.5;
+  f = blanc;
+  g : int = 4;
+  h = if d then 2 else 3;
+
+
+-- types
+type
+  t1, t2, t3;
+  t4 = t1^(2*g);
+  t5 = t4^(2*h+1);
+  coord = {x: real;  y: real};
+  couleur = enum {bleu, blanc, rouge};
+  coord_tab = coord^(2*g-7);
+
+-- noeuds et fonctions externes
+extern node n1(a1, b1, c1: t1) returns (d1: bool);
+extern node n2(a1, b1, c1: t4; d1: bool) returns (e1: t5);
+extern function f1(a1, b1, c1: couleur) returns (d1: bool^h) ;
+
+-- noeuds et fonctions définis
+------------------------------
+node declaration(a1: int) returns (b1: int);
+let
+  b1 = a1;
+tel;
+
+------------------------------
+node n4(a1: bool) returns (b1: bool);
+var
+  c1: bool;
+let
+  c1 = not c1;
+  b1 = not(a1 and c1);
+tel;
+
+------------------------------
+node n5(a1: real) returns (b1: real);
+var
+  c1: real;
+let
+  b1 = a1 / c1;
+tel;
diff --git a/src/test/should_work/demo/def.lus b/src/test/should_work/demo/def.lus
new file mode 100644
index 00000000..a21d0d76
--- /dev/null
+++ b/src/test/should_work/demo/def.lus
@@ -0,0 +1,67 @@
+-- constantes 
+-------------
+const 
+  id_int : int = 5;
+  a : int = 4;
+  b : bool = true;
+  c : real = 3.14;
+
+-- types : 
+----------
+type 
+  t1, t2, t3;
+  string = int^a;
+  string2d = string^a; -- ~ int^a^a
+  structT = {x: int;  y: real;  z: string2d^a}; -- z ~ int^a^a^a 
+  tabStruct = structT^2;
+
+-- noeud principale : 
+---------------------
+node def(a1: bool; 
+         b1: string2d  when a1; 
+         c1: tabStruct when a1;
+	 d1: int^23) 
+returns (res: bool when a1);
+var
+  h1: int^4;
+  h2: tabStruct;
+  h3: int when a1;
+  h4: real when a1;
+  h5: string2d^a when a1;
+  h6: string2d ;
+let
+  res = (pre(h1[0])>0) when a1;
+  h1[0] = current(if res then b1[0][0] else b1[1][0]);
+  h1[1] = current(if res then b1[0][1] else b1[1][1]);
+  h1[2] = current(if res then b1[0][2] else b1[1][2]);
+  h1[3] = current(if res then b1[0][3] else b1[1][3]);
+  h2[0] = current(c1[0]);
+  h2[1].x = current(c1[1].x);
+  h2[1].y = current(c1[1].y);   
+  h2[1].z[0][0][0] = 0; --current(c1[1].z); 
+  h2[1].z[0][0][1] = 0;
+  h2[1].z[0][0][2] = 0;
+  h2[1].z[0][0][3] = 0;
+  h2[1].z[0][1] = current(c1[1].z[0][1]); 
+  h2[1].z[0][2] = current(c1[1].z[0][2]);
+  h2[1].z[0][3] = current(c1[1].z[0][3]);
+  h2[1].z[1] = current(c1[1].z[1]);
+  h2[1].z[2] = current(c1[1].z[1]);
+  h2[1].z[3] = current(c1[1].z[1]);
+  h3 = c1[0].x + c1[1].z[2][1][0];
+  h4 = c1[1].y;
+  h5 = c1[1].z;
+  h6[2][0] = 0;
+  h6[2][1] = 1;
+  h6[2][2] = 2;
+  h6[2][3] = 3;
+  h6[1] = current(c1[1].z[2][1]);
+  h6[0] = current(c1[1].z[2][1]);
+  h6[3] = current(c1[1].z[2][1]);
+
+-- Quelques erreurs de definition multiple
+  -- h2[0].x = current(c1[0].x);
+  -- h2[1] = current(c1[1]);
+  -- h2[1].z[0][0][2] = 0;
+  -- res = false when a1;
+tel
diff --git a/src/test/should_work/demo/filliter.lus b/src/test/should_work/demo/filliter.lus
new file mode 100644
index 00000000..a6936e72
--- /dev/null
+++ b/src/test/should_work/demo/filliter.lus
@@ -0,0 +1,28 @@
+const 
+  NBC: int = 3; 
+type t = int^5; 
+
+node copie(acc_in : int) 
+     returns (acc_out : int; elt : int);
+let
+   acc_out = acc_in;
+   elt = acc_in;
+tel
+
+-- remplissage d'un tableau avec 0, 1, 2, ...
+node incr_acc( acc_in : int) returns ( acc_out: int; res : int);
+let
+        res = acc_in;
+        acc_out = res + 1;
+tel
+
+node filliter(c: bool; i1, i2: int when c) returns (s1, s2: int^NBC when c);
+
+var x : int^4 when c;
+    bid1,  bid2 : int when c;
+
+let
+  s1 = x[0..2];
+  (bid1, x) = fill<<copie,  4 >>(i1);
+  (bid2, s2) = fill<<incr_acc,  NBC >>(i2);
+tel
diff --git a/src/test/should_work/demo/filter.lus b/src/test/should_work/demo/filter.lus
new file mode 100644
index 00000000..fa0a8aa0
--- /dev/null
+++ b/src/test/should_work/demo/filter.lus
@@ -0,0 +1,17 @@
+type 
+  complexe = {x: real;  y: real};
+  cdouble = {x: complexe; y: complexe};
+
+node filter(a, b: real) returns (ok: bool );
+var
+  i: real;
+ z: cdouble;
+let 
+  z.x.x = 0. -> i;
+  z.x.y = z.x.x;
+  --z = pre(z);
+  z.y.x = z.x.x;
+  z.y.y = z.y.x;
+  i = 1.;
+  ok = z.y.y < z.y.x;
+tel
diff --git a/src/test/should_work/demo/lustre_test1_ok.lus b/src/test/should_work/demo/lustre_test1_ok.lus
new file mode 100644
index 00000000..6271f58c
--- /dev/null
+++ b/src/test/should_work/demo/lustre_test1_ok.lus
@@ -0,0 +1,69 @@
+node subsys1
+        (s1:real)
+returns (s2:real);
+var Discrete_Filter:real;
+let
+	Discrete_Filter = TransFnc_1(s1);
+	s2 = Discrete_Filter  ;
+
+	
+tel
+
+node lustre_test1_ok
+        (In1:real;cl1_2:bool;cl1_4:bool; In2:real;cl2_6:bool when cl1_2; In3:bool when cl1_4)
+returns (out1:real;Out2:real;Out3:real);
+var Sum:real;
+    Unit_Delay1:real;
+     zoh1:real  when cl1_4;
+     zoh2:real  when cl2_6;
+     subsys1_Trigger:bool  when cl1_4;
+     subsys1_s1:real  when cl1_4;
+     subsys1_s2:real  when cl1_4;
+     Unit_Delay1_:real  when cl1_2;
+     Out2_:real  when cl1_2;
+let
+	Sum = In1 +Unit_Delay1 ;
+	Unit_Delay1_ = if cl2_6 then current zoh2
+		else (0.0 when cl1_2) -> pre Unit_Delay1_;
+	Unit_Delay1 = if cl1_2 then current Unit_Delay1_
+		else 0.0 -> pre Unit_Delay1;
+	zoh1 = In1 when cl1_4 ;
+	zoh2 = In2 when cl2_6 ;
+	out1 = Sum  ;
+
+	Out2_ = if cl2_6 then current zoh2
+		else (0.0 when cl1_2) -> pre Out2_;
+	Out2 = if cl1_2 then current Out2_
+		else 0.0 -> pre Out2;
+	Out3 = if cl1_4 then current subsys1_s2
+		else 0.0 -> pre Out3;
+			----  node-calls
+	subsys1_Trigger = rising (In3);
+	subsys1_s1 = zoh1;
+	(subsys1_s2) = if subsys1_Trigger
+		then current subsys1((subsys1_s1) when subsys1_Trigger)
+		else (0.0) when cl1_4 -> pre (subsys1_s2);
+	
+tel
+
+
+
+/********** Edges *********/
+
+node rising (in :bool)
+returns (out :bool);
+let
+	out = false -> in and not pre in;
+tel
+
+
+/*********** The  Transfer Functions  ***********/
+
+node TransFnc_1(E:real) returns(S:real);
+var Sm_1 :real;
+let
+	S = 1.0*E -0.5*Sm_1 ;
+	Sm_1 = 0.0->pre(S) ;
+	
+tel
+
diff --git a/src/test/should_work/demo/map_red_iter.lus b/src/test/should_work/demo/map_red_iter.lus
new file mode 100644
index 00000000..95ae6dce
--- /dev/null
+++ b/src/test/should_work/demo/map_red_iter.lus
@@ -0,0 +1,64 @@
+----------------------------------------------------
+--Maquette du noeud traite_gen :
+--  On a juste mis le calcul du TabComVal,
+--   le reste etant realise par un ``noeud'' abstrait
+----------------------------------------------------
+
+------------------------------------------
+-- Constantes
+------------------------------------------
+const NBC = 20;
+const NBG = 4;
+
+----------------------------------------
+--Types :
+------------------------------------------
+type INTNBC = int^NBC;
+type INTNBG = int^NBG;
+
+type T_EntreeGlob = {
+        chg2gen      : INTNBC;  -- ch2gen[i] est le Numero du generateur sur lequel 
+                            -- la charge i est branchee (correspondance charge/generateur)
+        mesure_chgs  : INTNBC;  -- Les charges qu'on a
+        mesure_gens  : INTNBG}; -- Les generateurs
+
+type T_InfoChgIndiv = {
+        mesure_chg : int};
+
+type T_InfoChgGlob = {
+        chg2gen : INTNBC};
+
+--type T_EtatCharge = enum {
+--      EC_ON, EC_OFF, EC_NON_CTRL, EC_LESTAGE, EC_DELESTAGE};
+type T_EtatCharge = int;
+
+type T_InfoGenIndiv = {
+        mesure_gen : int};
+
+type T_InfoGenGlob = {
+    elt_bidon : int;
+     chg2gen : INTNBC};
+
+--type T_ComChg = enum {
+--      COM_ERR, COM_ON, COM_OFF};
+type T_ComChg = int;
+
+
+node traite_genCore_itere(acc_in : int; elt1 : bool; elt2 : int) returns (acc_out : int; elt : int); 
+let
+  elt = if(elt1)
+        then elt2
+        else acc_in;
+  acc_out = acc_in;
+tel
+
+node map_red_iter (indice_gen : int ; 
+                      InfoGenIndiv  : T_InfoGenIndiv ;
+                      InfoGenGlob    : T_InfoGenGlob ;
+                      TabEtatCharge : T_EtatCharge^NBC;
+                      TabComVal     : bool^NBC) 
+        returns (TabComChg  : T_ComChg^NBC);
+var bidon : int;
+let
+   bidon, TabComChg = map_red<<traite_genCore_itere, NBC>>(indice_gen, TabComVal, InfoGenGlob.chg2gen);
+tel
diff --git a/src/test/should_work/demo/mapdeRed.lus b/src/test/should_work/demo/mapdeRed.lus
new file mode 100644
index 00000000..b83202aa
--- /dev/null
+++ b/src/test/should_work/demo/mapdeRed.lus
@@ -0,0 +1,19 @@
+const n = 2;
+const m = 3;
+const p = 5;
+
+node mapdeRed(init : int^n; init2 : int) returns (r : int^n; --);
+--var 
+  T :  int^2^3;
+  bid :  int;
+);
+let
+  bid, T = fill<<fill<<incr;n>>;m>>(init2);
+  r = red<<map<<+;n>>;m>>(init, T);
+tel
+
+node incr(i: int) returns (accu, s: int);
+let
+  accu = i + 1;
+  s = i; 
+tel
\ No newline at end of file
diff --git a/src/test/should_work/demo/mapiter.lus b/src/test/should_work/demo/mapiter.lus
new file mode 100644
index 00000000..c719232c
--- /dev/null
+++ b/src/test/should_work/demo/mapiter.lus
@@ -0,0 +1,10 @@
+node incr_tab(a: int) returns (b: int);
+let
+  b = a+1;
+tel
+
+node mapiter ( i1 : int^7^3)  
+        returns (s1 : int^7^3);
+let
+        s1 = map<<map<<incr_tab;7>>;3>>(i1);
+tel
\ No newline at end of file
diff --git a/src/test/should_work/demo/mapiter_lv4.lus b/src/test/should_work/demo/mapiter_lv4.lus
new file mode 100644
index 00000000..a415d6ee
--- /dev/null
+++ b/src/test/should_work/demo/mapiter_lv4.lus
@@ -0,0 +1,45 @@
+-------------------------------------------- 
+-- File `mapiter_lv4.lus' generated by 
+-- the lustre-v6 compiler version 0.17
+--------------------------------------------
+
+-------------------------------------------- 
+-- internal type(s) definition(s)  
+-------------------------------------------- 
+type T1_ARRAY = int^7;
+type T2_ARRAY = T1_ARRAY^3;
+
+--------------------------------------------
+-- alias types and constant declarations
+--------------------------------------------
+
+-------------------------------------------- 
+-- operator definition 
+-------------------------------------------- 
+node mapiter(
+ i_i1 : T2_ARRAY;
+ ) returns ( 
+ o_s1 : T2_ARRAY;
+ );
+let
+   o_s1 = m_m_incr_tab_7_3(i_i1);
+tel
+
+
+----------------------------------------------
+-- V6-iterators traduction 
+----------------------------------------------
+
+-- node: m_incr_tab_7
+------------------------------------ 
+node m_incr_tab_7(i0 : T1_ARRAY) returns (o0 : T1_ARRAY);
+let
+  o0 = incr_tab(i0);
+tel
+
+-- node: m_m_incr_tab_7_3
+------------------------------------ 
+node m_m_incr_tab_7_3(i0 : T2_ARRAY) returns (o0 : T2_ARRAY);
+let
+  o0 = m_incr_tab_7(i0);
+tel
diff --git a/src/test/should_work/demo/mappredef.lus b/src/test/should_work/demo/mappredef.lus
new file mode 100644
index 00000000..2c8c2a75
--- /dev/null
+++ b/src/test/should_work/demo/mappredef.lus
@@ -0,0 +1,12 @@
+const N = 3;
+type tab_int = int^N;
+     tab_bool = bool^N;
+
+node mappredef(x: tab_bool; a, b: tab_int) returns (c, d: tab_int);
+	var 
+		z : int; 
+	let
+		z = if(x[0]) then a[0] else b[0] ;
+		c = map<<if,  N>>(x, a, b);
+		d = map<<Lustre::iuminus,  N>>(b);		
+	tel
diff --git a/src/test/should_work/demo/plus.lus b/src/test/should_work/demo/plus.lus
new file mode 100644
index 00000000..c3efe16d
--- /dev/null
+++ b/src/test/should_work/demo/plus.lus
@@ -0,0 +1,9 @@
+node plus(a: int ; b: int) returns (c, d, e, f: int);
+	let
+		c = Lustre::iplus(a, b);
+		d = a + b;
+	  	e = if(boolred<<0,1,2>>(true^2)) then a else b;
+		--f = if(nor(c<b, Lustre::ilte(c,b))) then a else b;
+		f = if(boolred<<0,0,2>>([c<b, Lustre::ilte(c,b)])) then a else b;
+	tel
+
diff --git a/src/test/should_work/demo/pre_x.lus b/src/test/should_work/demo/pre_x.lus
new file mode 100644
index 00000000..eeabd604
--- /dev/null
+++ b/src/test/should_work/demo/pre_x.lus
@@ -0,0 +1,6 @@
+
+node pre_x(a, b: int) returns (x: bool);
+let
+	x = false -> if pre(a)=pre(b) then not pre(x) else pre(x);
+tel
+
diff --git a/src/test/should_work/demo/rediter.lus b/src/test/should_work/demo/rediter.lus
new file mode 100644
index 00000000..83487a62
--- /dev/null
+++ b/src/test/should_work/demo/rediter.lus
@@ -0,0 +1,9 @@
+node max(init: int; a: int) returns (b: int);
+let 
+  b = if(init>a) then init else a;
+tel
+
+node rediter(a: int^5^3) returns (b: int);
+let 
+  b = red<<red<<max; 5>>; 3>>(0, a);
+tel
diff --git a/src/test/should_work/demo/redoptest.lus b/src/test/should_work/demo/redoptest.lus
new file mode 100644
index 00000000..29150a45
--- /dev/null
+++ b/src/test/should_work/demo/redoptest.lus
@@ -0,0 +1,9 @@
+node max(init: int; a: int) returns (b: int);
+let 
+  b = if(init>a) then init else a;
+tel
+
+node redoptest(a: int^5^3) returns (b: int);
+let 
+  b = red<<red<<+,  5>>, 3>>(0, a);
+tel
diff --git a/src/test/should_work/demo/sample_time_change.lus b/src/test/should_work/demo/sample_time_change.lus
new file mode 100644
index 00000000..024a17c7
--- /dev/null
+++ b/src/test/should_work/demo/sample_time_change.lus
@@ -0,0 +1,63 @@
+/*
+file generated on    :		Fri Nov 14 17:29:48 MET 2003
+using the compiler   :		Simulink to Lustre   CURRENT VERSION!!!
+*/
+
+
+/**************** The MainNode node of the model ****************/
+node MainNode (In3:real)
+returns (Out2:real);
+var cl1_4_2, cl1_12_3 :bool;
+    Out2_ :real when cl1_4_2 ;
+let
+	cl1_4_2 = make_cl1_4_2(true) ;
+	cl1_12_3 = make_cl1_12_3(true) ;
+	(Out2_) = sample_time_change (cl1_4_2, cl1_12_3, In3 when cl1_12_3);
+	Out2 = if cl1_4_2 then current Out2_ else 0.0 -> pre Out2 ;
+tel
+
+
+/****************** All the nodes of the Model ******************/
+node sample_time_change (cl1_4_2, cl1_12_3:bool; In3:real when cl1_12_3)
+returns (Out2:real when cl1_4_2);
+var Unit_Delay1:real when cl1_12_3;
+    Unit_Delay2:real when cl1_4_2;
+let
+	Unit_Delay1 = 0.0 when cl1_12_3 -> pre In3 ;
+	Unit_Delay2 = 0.0 when cl1_4_2 -> pre Unit_Delay2 ;
+	Out2 = Unit_Delay2 ;
+tel
+
+
+/**************************** Clocks ****************************/
+node make_cl1_4_2(in: bool) returns (out: bool);
+var cl1, cl2, cl3, cl4, pha1, pha2 :bool ;
+let
+	cl1 = true -> pre cl2 ;
+	cl2 = false -> pre cl3 ;
+	cl3 = false -> pre cl4 ;
+	cl4 = false -> pre cl1 ;
+	pha1 = false -> pre cl1 ;
+	pha2 = false -> pre pha1 ;
+	out = pha2 ;
+tel
+node make_cl1_12_3(in: bool) returns (out: bool);
+var cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, cl10, cl11, cl12, pha1, pha2, pha3 :bool ;
+let
+	cl1 = true -> pre cl2 ;
+	cl2 = false -> pre cl3 ;
+	cl3 = false -> pre cl4 ;
+	cl4 = false -> pre cl5 ;
+	cl5 = false -> pre cl6 ;
+	cl6 = false -> pre cl7 ;
+	cl7 = false -> pre cl8 ;
+	cl8 = false -> pre cl9 ;
+	cl9 = false -> pre cl10 ;
+	cl10 = false -> pre cl11 ;
+	cl11 = false -> pre cl12 ;
+	cl12 = false -> pre cl1 ;
+	pha1 = false -> pre cl1 ;
+	pha2 = false -> pre pha1 ;
+	pha3 = false -> pre pha2 ;
+	out = pha3 ;
+tel
diff --git a/src/test/should_work/demo/test.exp b/src/test/should_work/demo/test.exp
new file mode 100644
index 00000000..f970f67e
--- /dev/null
+++ b/src/test/should_work/demo/test.exp
@@ -0,0 +1,5 @@
+alias bred clock1_2ms clock declaration decl def filliter filter Gyroscope2 lustre_test1_ok mapdeRed mapiter mappredef Error : at `map' in file `mappredef.lus' (l.10/c.21)  : 
+	found     (bool^3,int^3,int^3)
+	required  (bool^3,'a^3,'a^3)
+1 Type(s) error(s) found ...
+map_red_iter plus pre_x rediter redoptest sample_time_change tranche 
\ No newline at end of file
diff --git a/src/test/should_work/demo/tranche.lus b/src/test/should_work/demo/tranche.lus
new file mode 100644
index 00000000..146291f4
--- /dev/null
+++ b/src/test/should_work/demo/tranche.lus
@@ -0,0 +1,32 @@
+type 
+  t = bool^3^4;
+  t2 = bool^7^8^9^10;
+
+const 
+ n : t;
+ m = n[3][2];
+ s : t2;
+ o = s[9][8][7][6]; 
+
+node tranche(a: bool^3) returns (res: bool);
+var 
+  x: bool^3;
+  y: real;
+  z: t;
+  x1 :  bool^3^2;
+
+let
+  y = 1.;
+  x[if(1>2) then -2 else 0] = true;
+  x[1..2] = a[1..2];
+  res = true or false; --if x[1] then x[0] else x[2];
+  z[0][0] = true;
+  z[0][1] = true;
+  z[0][2] = true;
+  z[1][0] = true;
+  z[1][1..2] = x[1..2];
+  z[2..3]= x1;
+  x1[0] = x;
+  x1[1] = x;
+  --x[0] = x1[0][0]; 
+tel
diff --git a/src/test/should_work/fab_test/bob.lus b/src/test/should_work/fab_test/bob.lus
new file mode 100644
index 00000000..4aa724d2
--- /dev/null
+++ b/src/test/should_work/fab_test/bob.lus
@@ -0,0 +1,5 @@
+node bob(i : bool ) returns (o : bool when i);
+let
+	o = (true -> pre(false -> pre(i))) when i;
+	assert (true -> i <> pre(i)) ;
+tel
diff --git a/src/test/should_work/fab_test/def.lus b/src/test/should_work/fab_test/def.lus
new file mode 100644
index 00000000..9ca92197
--- /dev/null
+++ b/src/test/should_work/fab_test/def.lus
@@ -0,0 +1,5 @@
+node def(i: bool) returns (a, b: bool);
+let 
+  a=true;
+  b=false;
+tel
diff --git a/src/test/should_work/fab_test/ex.lus b/src/test/should_work/fab_test/ex.lus
new file mode 100644
index 00000000..6b289811
--- /dev/null
+++ b/src/test/should_work/fab_test/ex.lus
@@ -0,0 +1,16 @@
+
+node ex (i : bool) returns (o : bool);
+let
+   o = true -> pre(i) and trueNode(i);
+tel
+
+node trueNode(x : bool) returns (y : bool);
+let
+   y = x or id(true,false);
+tel
+
+node id(f,a:bool) returns (g:bool);
+let
+   g = f or a;
+tel
+
diff --git a/src/test/should_work/fab_test/iter.lus b/src/test/should_work/fab_test/iter.lus
new file mode 100644
index 00000000..2b740356
--- /dev/null
+++ b/src/test/should_work/fab_test/iter.lus
@@ -0,0 +1,37 @@
+const n=5;
+
+node iter(init : int) returns (Tab_out : int^n ; Red_plus : int ; zorroTab : int^5 ; zorroAcc : int);
+var 
+	T_inter : int^n;
+	bidon : int;	
+let
+	bidon, T_inter = fill<<filled,n>>(init);
+	Tab_out = map<<mapped,n>>(T_inter);
+	Red_plus = red<<plus,n>>(-100, Tab_out);
+
+	zorroAcc, zorroTab = map_red<<garcia,5>>(0,[0,0,0,0,0]);
+tel
+
+node filled(accu_in : int) returns (accu_out : int ; elt : int);
+let 
+	accu_out = accu_in + 1 ;
+	elt = accu_in ;
+tel
+
+node mapped(elt_in : int) returns (elt_out : int);
+let
+	elt_out = elt_in + 1;
+tel
+
+node plus(accu_in, elt_in : int) returns (accu_out : int);
+let
+	accu_out = accu_in + elt_in ;
+tel
+
+node garcia(accu_in, elt_in : int) returns (accu_out, elt_out : int);
+let
+	accu_out = accu_in + 1;
+	elt_out = elt_in + accu_out;
+tel
+
+
diff --git a/src/test/should_work/fab_test/iterate.lus b/src/test/should_work/fab_test/iterate.lus
new file mode 100644
index 00000000..d962fcc7
--- /dev/null
+++ b/src/test/should_work/fab_test/iterate.lus
@@ -0,0 +1,51 @@
+node iterate(IN1 : int^10; IN2:int^10) 
+returns (
+	OUT : int^10;
+	out_map1 : int^10;
+	out_map2 : int^10;
+	out_red1 : int;
+	out_fill1, out_fill2 : int^10;
+	out_mapred1 : int;
+	out_mapred2, out_mapred3 : int^10);
+var
+  bidon : int;
+let
+  out_map1, out_map2 = map<<mapped;10>>(IN1, IN2);  -- Copie a l'identique les entrees dans les sorties
+  out_red1 = red<<redduced;10>>(0, IN1, IN2);       -- permet de calculer la somme des elements des 2 tableaux d'entree
+  bidon, out_fill1, out_fill2 = fill<<filled;10>>(0);      -- construit [0, 1, 2, ... , 9] et [0, 2, 4, ... , 18]
+  out_mapred1, out_mapred2, out_mapred3, OUT =      
+          map_red<<map_redduced;10>>(0, IN1, IN2);
+tel
+
+
+
+node mapped(elt_in1, elt_in2 : int) returns (elt_out1, elt_out2 : int);
+let
+  elt_out1 = elt_in1;
+  elt_out2 = elt_in2;
+tel
+
+
+
+node redduced(accu_in : int ; elt_in1,  elt_in2 : int) returns (accu_out : int);
+let
+   accu_out = accu_in + elt_in1 + elt_in2;
+tel
+
+
+node filled(accu_in : int) returns (accu_out : int; elt_out1, elt_out2 : int);
+let
+   accu_out = accu_in + 1;
+   elt_out1 = accu_in;
+   elt_out2 = accu_in * 2;
+tel
+
+node map_redduced(accu_in : int ; elt_in1,  elt_in2 : int) returns (accu_out : int; elt_out1, elt_out2, elt_out3 : int);
+let
+   accu_out = accu_in + 1;
+   elt_out1 = elt_in1;
+   elt_out2 = elt_in2;
+   elt_out3 = elt_in1 + elt_in2;
+tel
+ 
+
diff --git a/src/test/should_work/fab_test/iterate.trace b/src/test/should_work/fab_test/iterate.trace
new file mode 100644
index 00000000..cdf4ba55
--- /dev/null
+++ b/src/test/should_work/fab_test/iterate.trace
@@ -0,0 +1,1465 @@
+Call:   Program
+  Call:   ModelInstance(LOOKING AHEAD...)
+Current character : n (110)
+   Possible string literal matches : { "needs", "node", "nor", "not" } 
+Current character : o (111)
+   Possible string literal matches : { "node", "nor", "not" } 
+Current character : d (100)
+   Possible string literal matches : { "node" } 
+Current character : e (101)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "node" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 4 characters as a "node" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "node" MATCH (node) ******
+
+    Visited token: <"node">; Expected token: <"package">
+  Return: ModelInstance(LOOKAHEAD FAILED)
+  Call:   PackageV4
+    Call:   EntityDecl
+      Call:   NodeDecl
+        Call:   NodeHeader
+          Consumed token: <"node">
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : t (116)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ( (40)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (iterate) ******
+
+          Consumed token: <<IDF>: "iterate">
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : I (73)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : I (73)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN1) ******
+
+                    Consumed token: <<IDF>: "IN1">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : : (58)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDFIER> }
+Current character : i (105)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 2 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN2) ******
+
+                    Visited token: <<IDF>: "IN2">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "IN2">
+                  Return: Ident
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character : i (105)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character : i (105)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ) (41)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+Skipping character :   (32)
+Skipping character : \n (10)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : t (116)
+   Possible string literal matches : { "returns" } 
+Current character : u (117)
+   Possible string literal matches : { "returns" } 
+Current character : r (114)
+   Possible string literal matches : { "returns" } 
+Current character : n (110)
+   Possible string literal matches : { "returns" } 
+Current character : s (115)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "returns" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a "returns" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "returns" MATCH (returns) ******
+
+          Consumed token: <"returns">
+Skipping character :   (32)
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : \n (10)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : O (79)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : O (79)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : U (85)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : T (84)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (OUT) ******
+
+                    Consumed token: <<IDF>: "OUT">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_map1) ******
+
+                    Visited token: <<IDF>: "out_map1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_map1">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_map2) ******
+
+                    Visited token: <<IDF>: "out_map2">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_map2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_red1) ******
+
+                    Visited token: <<IDF>: "out_red1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_red1">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : f (102)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 9 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_fill1) ******
+
+                    Visited token: <<IDF>: "out_fill1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_fill1">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : f (102)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 9 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_fill2) ******
+
+                    Consumed token: <<IDF>: "out_fill2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred1) ******
+
+                    Visited token: <<IDF>: "out_mapred1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_mapred1">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred2) ******
+
+                    Visited token: <<IDF>: "out_mapred2">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_mapred2">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 3 (51)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred3) ******
+
+                    Consumed token: <<IDF>: "out_mapred3">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ) (41)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+          Call:   Pragmas
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+            Visited token: <";">; Expected token: <<PRAGMA>>
+          Return: Pragmas
+          Consumed token: <";">
+        Return: NodeHeader
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : b (98)
+   Possible string literal matches : { "body", "boolred" } 
+Current character : i (105)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 5 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (bidon) ******
+
+      Return: NodeDecl
+    Return: EntityDecl
+  Return: PackageV4
+Return: Program
+ PROGRAM || = |Program
+ PROGRAM || = | Package iterate
+ PROGRAM || = |  NodeDecl
+ PROGRAM || = |   NodeHeader iterate
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident IN1
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident IN2
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident OUT
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_map1
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_map2
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_red1
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_fill1
+ PROGRAM || = |       Ident out_fill2
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_mapred1
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_mapred2
+ PROGRAM || = |       Ident out_mapred3
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+-- lustreV6 compiler version 1.0 --
diff --git a/src/test/should_work/fab_test/iterate_var.trace b/src/test/should_work/fab_test/iterate_var.trace
new file mode 100644
index 00000000..bf967482
--- /dev/null
+++ b/src/test/should_work/fab_test/iterate_var.trace
@@ -0,0 +1,8696 @@
+Call:   Program
+  Call:   ModelInstance(LOOKING AHEAD...)
+Current character : n (110)
+   Possible string literal matches : { "needs", "node", "nor", "not" } 
+Current character : o (111)
+   Possible string literal matches : { "node", "nor", "not" } 
+Current character : d (100)
+   Possible string literal matches : { "node" } 
+Current character : e (101)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "node" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 4 characters as a "node" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "node" MATCH (node) ******
+
+    Visited token: <"node">; Expected token: <"package">
+  Return: ModelInstance(LOOKAHEAD FAILED)
+  Call:   PackageV4
+    Call:   EntityDecl
+      Call:   NodeDecl
+        Call:   NodeHeader
+          Consumed token: <"node">
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : t (116)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ( (40)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (iterate) ******
+
+          Consumed token: <<IDF>: "iterate">
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : I (73)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : I (73)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN1) ******
+
+                    Consumed token: <<IDF>: "IN1">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : : (58)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDFIER> }
+Current character : i (105)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 2 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN2) ******
+
+                    Visited token: <<IDF>: "IN2">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "IN2">
+                  Return: Ident
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character : i (105)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character : i (105)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ) (41)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+Skipping character :   (32)
+Skipping character : \n (10)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : t (116)
+   Possible string literal matches : { "returns" } 
+Current character : u (117)
+   Possible string literal matches : { "returns" } 
+Current character : r (114)
+   Possible string literal matches : { "returns" } 
+Current character : n (110)
+   Possible string literal matches : { "returns" } 
+Current character : s (115)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "returns" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a "returns" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "returns" MATCH (returns) ******
+
+          Consumed token: <"returns">
+Skipping character :   (32)
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : \n (10)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : O (79)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : O (79)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : U (85)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : T (84)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (OUT) ******
+
+                    Consumed token: <<IDF>: "OUT">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_map1) ******
+
+                    Visited token: <<IDF>: "out_map1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_map1">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_map2) ******
+
+                    Visited token: <<IDF>: "out_map2">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_map2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_red1) ******
+
+                    Visited token: <<IDF>: "out_red1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_red1">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : f (102)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 9 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_fill1) ******
+
+                    Visited token: <<IDF>: "out_fill1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_fill1">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : f (102)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 9 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_fill2) ******
+
+                    Consumed token: <<IDF>: "out_fill2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ; (59)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred1) ******
+
+                    Visited token: <<IDF>: "out_mapred1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_mapred1">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Skipping character : \t (9)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred2) ******
+
+                    Visited token: <<IDF>: "out_mapred2">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "out_mapred2">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 3 (51)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred3) ******
+
+                    Consumed token: <<IDF>: "out_mapred3">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ^ (94)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ^ (94)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "^" token.
+****** FOUND A "^" MATCH (^) ******
+
+                  Consumed token: <"^">
+                  Call:   PowerExpression
+                    Call:   PrimaryExpression
+                      Call:   Call(LOOKING AHEAD...)
+                        Call:   UserOp(LOOKING AHEAD...)
+                          Call:   Identifier(LOOKING AHEAD...)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : ) (41)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                            Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                          Return: Identifier(LOOKAHEAD FAILED)
+                          Call:   IterOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                          Return: IterOp(LOOKAHEAD FAILED)
+                          Call:   BoolRedOp(LOOKING AHEAD...)
+                            Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                          Return: BoolRedOp(LOOKAHEAD FAILED)
+                        Return: UserOp(LOOKAHEAD FAILED)
+                      Return: Call(LOOKAHEAD FAILED)
+                      Call:   Value
+                        Consumed token: <<VAL_INT>: "10">
+                      Return: Value
+                    Return: PrimaryExpression
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                  Return: PowerExpression
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+          Call:   Pragmas
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+            Visited token: <";">; Expected token: <<PRAGMA>>
+          Return: Pragmas
+          Consumed token: <";">
+        Return: NodeHeader
+Skipping character : \n (10)
+Current character : v (118)
+   Possible string literal matches : { "var" } 
+Current character : a (97)
+   Possible string literal matches : { "var" } 
+Current character : r (114)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "var" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "var" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "var" MATCH (var) ******
+
+        Call:   FNBody
+          Call:   LocalVar
+            Consumed token: <"var">
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : b (98)
+   Possible string literal matches : { "body", "boolred" } 
+Current character : i (105)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 5 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (bidon) ******
+
+                    Consumed token: <<IDF>: "bidon">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character : \n (10)
+Current character : l (108)
+   Possible string literal matches : { "let" } 
+Current character : e (101)
+   Possible string literal matches : { "let" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "let" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "let" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "let" MATCH (let) ******
+
+                    Visited token: <"let">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD FAILED)
+                Return: IdentList(LOOKAHEAD FAILED)
+              Return: VarDecl(LOOKAHEAD FAILED)
+            Return: VarDeclList
+            Consumed token: <";">
+          Return: LocalVar
+          Consumed token: <"let">
+          Call:   EquationList
+            Call:   EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_map1) ******
+
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "out_map1">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                        Visited token: <",">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <",">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                  Consumed token: <",">
+                  Call:   Left
+                    Call:   Identifier
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_map2) ******
+
+                      Consumed token: <<IDF>: "out_map2">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : m (109)
+   Possible string literal matches : { "model", "mirror", "map", "map_red", 
+     "mod" } 
+Current character : a (97)
+   Possible string literal matches : { "map", "map_red" } 
+Current character : p (112)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : < (60)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : < (60)
+   Currently matched the first 3 characters as a "map" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "map" MATCH (map) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <"map">; Expected token: <<IDFIER>>
+                                                  Visited token: <"map">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD FAILED)
+                                                Call:   IterOp(LOOKING AHEAD...)
+                                                  Visited token: <"map">; Expected token: <"map">
+                                                  Call:   IterParam(LOOKING AHEAD...)
+Current character : < (60)
+   Currently matched the first 1 characters as a "<" token.
+   Possible string literal matches : { "<>", "<=", "<<" } 
+Current character : < (60)
+   No more string literal token matches are possible.
+   Currently matched the first 2 characters as a "<<" token.
+****** FOUND A "<<" MATCH (<<) ******
+
+                                                    Visited token: <"<<">; Expected token: <"<<">
+                                                    Call:   PredefOp(LOOKING AHEAD...)
+Current character : m (109)
+   Possible string literal matches : { "model", "mirror", "map", "map_red", 
+     "mod" } 
+Current character : a (97)
+   Possible string literal matches : { "map", "map_red" } 
+Current character : p (112)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : p (112)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 6 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (mapped) ******
+
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"+">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"-">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"div">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"*">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"/">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"and">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"or">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"xor">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"=>">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"not">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"nor">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"#">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"<">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <">">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"<=">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <">=">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"=">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"<>">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"|">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"->">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"mod">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"when">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"pre">
+                                                      Visited token: <<IDF>: "mapped">; Expected token: <"if">
+                                                    Return: PredefOp(LOOKAHEAD FAILED)
+                                                    Call:   UserOp(LOOKING AHEAD...)
+                                                      Call:   Identifier(LOOKING AHEAD...)
+                                                        Visited token: <<IDF>: "mapped">; Expected token: <<IDFIER>>
+                                                        Visited token: <<IDF>: "mapped">; Expected token: <<IDF>>
+                                                      Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                    Return: UserOp(LOOKAHEAD SUCCEEDED)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                    Visited token: <";">; Expected token: <",">
+                                                    Visited token: <";">; Expected token: <";">
+                                                  Return: IterParam(LOOKAHEAD SUCCEEDED)
+                                                Return: IterOp(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                            Return: Call(LOOKAHEAD SUCCEEDED)
+                                            Call:   Call
+                                              Call:   UserOp
+                                                Call:   IterOp
+                                                  Consumed token: <"map">
+                                                  Call:   IterParam
+                                                    Consumed token: <"<<">
+                                                    Call:   UserOp
+                                                      Call:   Identifier
+                                                        Consumed token: <<IDF>: "mapped">
+                                                      Return: Identifier
+                                                    Return: UserOp
+                                                    Consumed token: <";">
+                                                    Call:   Expression
+                                                      Call:   ConcatExpression
+                                                        Call:   ArrowExpression
+                                                          Call:   ImpliesExpression
+                                                            Call:   OrExpression
+                                                              Call:   AndExpression
+                                                                Call:   EgalExpression
+                                                                  Call:   CompExpression
+                                                                    Call:   AdditiveExpression
+                                                                      Call:   MultiplicativeExpression
+                                                                        Call:   WhenExpression
+                                                                          Call:   UnaryExpression
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : > (62)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                                                                            Call:   SelectExpression
+                                                                              Call:   ImplicitArray
+                                                                                Call:   PrimaryExpression
+                                                                                  Call:   Call(LOOKING AHEAD...)
+                                                                                    Call:   UserOp(LOOKING AHEAD...)
+                                                                                      Call:   Identifier(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                                                                                      Return: Identifier(LOOKAHEAD FAILED)
+                                                                                      Call:   IterOp(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                                                                                      Return: IterOp(LOOKAHEAD FAILED)
+                                                                                      Call:   BoolRedOp(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                                                                                      Return: BoolRedOp(LOOKAHEAD FAILED)
+                                                                                    Return: UserOp(LOOKAHEAD FAILED)
+                                                                                  Return: Call(LOOKAHEAD FAILED)
+                                                                                  Call:   Value
+                                                                                    Consumed token: <<VAL_INT>: "10">
+                                                                                  Return: Value
+                                                                                Return: PrimaryExpression
+Current character : > (62)
+   Currently matched the first 1 characters as a ">" token.
+   Possible string literal matches : { ">=", ">>" } 
+Current character : > (62)
+   No more string literal token matches are possible.
+   Currently matched the first 2 characters as a ">>" token.
+****** FOUND A ">>" MATCH (>>) ******
+
+                                                                              Return: ImplicitArray
+                                                                              Call:   Selector
+                                                                                Call:   StructAccess(LOOKING AHEAD...)
+                                                                                  Visited token: <">>">; Expected token: <".">
+                                                                                Return: StructAccess(LOOKAHEAD FAILED)
+                                                                                Call:   TabAccess(LOOKING AHEAD...)
+                                                                                  Visited token: <">>">; Expected token: <"[">
+                                                                                Return: TabAccess(LOOKAHEAD FAILED)
+                                                                              Return: Selector
+                                                                            Return: SelectExpression
+                                                                          Return: UnaryExpression
+                                                                        Return: WhenExpression
+                                                                      Return: MultiplicativeExpression
+                                                                    Return: AdditiveExpression
+                                                                  Return: CompExpression
+                                                                Return: EgalExpression
+                                                              Return: AndExpression
+                                                            Return: OrExpression
+                                                          Return: ImpliesExpression
+                                                        Return: ArrowExpression
+                                                      Return: ConcatExpression
+                                                    Return: Expression
+                                                    Consumed token: <">>">
+                                                  Return: IterParam
+                                                Return: IterOp
+                                              Return: UserOp
+                                              Call:   Pragmas
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : I (73)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : I (73)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+                                                Visited token: <"(">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas
+                                              Consumed token: <"(">
+                                              Call:   ExpressionList
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN1) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<IDF>: "IN1">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<IDF>: "IN1">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                                                Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                                                                Call:   Pragmas(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                                                                                  Visited token: <",">; Expected token: <<PRAGMA>>
+                                                                                Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                                                                Visited token: <",">; Expected token: <"(">
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Identifier
+                                                                                Consumed token: <<IDF>: "IN1">
+                                                                              Return: Identifier
+                                                                            Return: PrimaryExpression
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                                Consumed token: <",">
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Skipping character :   (32)
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN2) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<IDF>: "IN2">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<IDF>: "IN2">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                                                Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                                                                Call:   Pragmas(LOOKING AHEAD...)
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                                                                                  Visited token: <")">; Expected token: <<PRAGMA>>
+                                                                                Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                                                                Visited token: <")">; Expected token: <"(">
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Identifier
+                                                                                Consumed token: <<IDF>: "IN2">
+                                                                              Return: Identifier
+                                                                            Return: PrimaryExpression
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <")">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <")">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                              Return: ExpressionList
+                                              Consumed token: <")">
+                                            Return: Call
+                                          Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : - (45)
+   Currently matched the first 1 characters as a "-" token.
+   Possible string literal matches : { "->" } 
+Current character : - (45)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <token of kind 6> }
+Current character : - (45)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : C (67)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : o (111)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : p (112)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : i (105)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : l (108)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : \' (39)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : i (105)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : d (100)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : n (110)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : i (105)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : q (113)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : u (117)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : l (108)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : n (110)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : r (114)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : d (100)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : n (110)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : l (108)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : o (111)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : r (114)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : i (105)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : \n (10)
+   Currently matched the first 52 characters as a <token of kind 6> token.
+****** FOUND A <token of kind 6> MATCH (-- Copie a l\'identique les entrees dans les sorties\n) ******
+
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_red1) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "out_red1">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : d (100)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "red" token.
+Current character : < (60)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : < (60)
+   Currently matched the first 3 characters as a "red" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "red" MATCH (red) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <"red">; Expected token: <<IDFIER>>
+                                                  Visited token: <"red">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD FAILED)
+                                                Call:   IterOp(LOOKING AHEAD...)
+                                                  Visited token: <"red">; Expected token: <"map">
+                                                  Visited token: <"red">; Expected token: <"red">
+                                                  Call:   IterParam(LOOKING AHEAD...)
+Current character : < (60)
+   Currently matched the first 1 characters as a "<" token.
+   Possible string literal matches : { "<>", "<=", "<<" } 
+Current character : < (60)
+   No more string literal token matches are possible.
+   Currently matched the first 2 characters as a "<<" token.
+****** FOUND A "<<" MATCH (<<) ******
+
+                                                    Visited token: <"<<">; Expected token: <"<<">
+                                                    Call:   PredefOp(LOOKING AHEAD...)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : d (100)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "red" token.
+Current character : d (100)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (redduced) ******
+
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"+">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"-">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"div">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"*">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"/">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"and">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"or">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"xor">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"=>">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"not">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"nor">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"#">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"<">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <">">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"<=">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <">=">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"=">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"<>">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"|">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"->">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"mod">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"when">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"pre">
+                                                      Visited token: <<IDF>: "redduced">; Expected token: <"if">
+                                                    Return: PredefOp(LOOKAHEAD FAILED)
+                                                    Call:   UserOp(LOOKING AHEAD...)
+                                                      Call:   Identifier(LOOKING AHEAD...)
+                                                        Visited token: <<IDF>: "redduced">; Expected token: <<IDFIER>>
+                                                        Visited token: <<IDF>: "redduced">; Expected token: <<IDF>>
+                                                      Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                    Return: UserOp(LOOKAHEAD SUCCEEDED)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                    Visited token: <";">; Expected token: <",">
+                                                    Visited token: <";">; Expected token: <";">
+                                                  Return: IterParam(LOOKAHEAD SUCCEEDED)
+                                                Return: IterOp(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                            Return: Call(LOOKAHEAD SUCCEEDED)
+                                            Call:   Call
+                                              Call:   UserOp
+                                                Call:   IterOp
+                                                  Consumed token: <"red">
+                                                  Call:   IterParam
+                                                    Consumed token: <"<<">
+                                                    Call:   UserOp
+                                                      Call:   Identifier
+                                                        Consumed token: <<IDF>: "redduced">
+                                                      Return: Identifier
+                                                    Return: UserOp
+                                                    Consumed token: <";">
+                                                    Call:   Expression
+                                                      Call:   ConcatExpression
+                                                        Call:   ArrowExpression
+                                                          Call:   ImpliesExpression
+                                                            Call:   OrExpression
+                                                              Call:   AndExpression
+                                                                Call:   EgalExpression
+                                                                  Call:   CompExpression
+                                                                    Call:   AdditiveExpression
+                                                                      Call:   MultiplicativeExpression
+                                                                        Call:   WhenExpression
+                                                                          Call:   UnaryExpression
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : > (62)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                                                                            Call:   SelectExpression
+                                                                              Call:   ImplicitArray
+                                                                                Call:   PrimaryExpression
+                                                                                  Call:   Call(LOOKING AHEAD...)
+                                                                                    Call:   UserOp(LOOKING AHEAD...)
+                                                                                      Call:   Identifier(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                                                                                      Return: Identifier(LOOKAHEAD FAILED)
+                                                                                      Call:   IterOp(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                                                                                      Return: IterOp(LOOKAHEAD FAILED)
+                                                                                      Call:   BoolRedOp(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                                                                                      Return: BoolRedOp(LOOKAHEAD FAILED)
+                                                                                    Return: UserOp(LOOKAHEAD FAILED)
+                                                                                  Return: Call(LOOKAHEAD FAILED)
+                                                                                  Call:   Value
+                                                                                    Consumed token: <<VAL_INT>: "10">
+                                                                                  Return: Value
+                                                                                Return: PrimaryExpression
+Current character : > (62)
+   Currently matched the first 1 characters as a ">" token.
+   Possible string literal matches : { ">=", ">>" } 
+Current character : > (62)
+   No more string literal token matches are possible.
+   Currently matched the first 2 characters as a ">>" token.
+****** FOUND A ">>" MATCH (>>) ******
+
+                                                                              Return: ImplicitArray
+                                                                              Call:   Selector
+                                                                                Call:   StructAccess(LOOKING AHEAD...)
+                                                                                  Visited token: <">>">; Expected token: <".">
+                                                                                Return: StructAccess(LOOKAHEAD FAILED)
+                                                                                Call:   TabAccess(LOOKING AHEAD...)
+                                                                                  Visited token: <">>">; Expected token: <"[">
+                                                                                Return: TabAccess(LOOKAHEAD FAILED)
+                                                                              Return: Selector
+                                                                            Return: SelectExpression
+                                                                          Return: UnaryExpression
+                                                                        Return: WhenExpression
+                                                                      Return: MultiplicativeExpression
+                                                                    Return: AdditiveExpression
+                                                                  Return: CompExpression
+                                                                Return: EgalExpression
+                                                              Return: AndExpression
+                                                            Return: OrExpression
+                                                          Return: ImpliesExpression
+                                                        Return: ArrowExpression
+                                                      Return: ConcatExpression
+                                                    Return: Expression
+                                                    Consumed token: <">>">
+                                                  Return: IterParam
+                                                Return: IterOp
+                                              Return: UserOp
+                                              Call:   Pragmas
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : 0 (48)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : 0 (48)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+                                                Visited token: <"(">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas
+                                              Consumed token: <"(">
+                                              Call:   ExpressionList
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Current character : 0 (48)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 0 (48)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : , (44)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (0) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD FAILED)
+                                                                                  Call:   IterOp(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"map">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"red">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"fill">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"map_red">
+                                                                                  Return: IterOp(LOOKAHEAD FAILED)
+                                                                                  Call:   BoolRedOp(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"boolred">
+                                                                                  Return: BoolRedOp(LOOKAHEAD FAILED)
+                                                                                Return: UserOp(LOOKAHEAD FAILED)
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Value
+                                                                                Consumed token: <<VAL_INT>: "0">
+                                                                              Return: Value
+                                                                            Return: PrimaryExpression
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                                Consumed token: <",">
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Skipping character :   (32)
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN1) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<IDF>: "IN1">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<IDF>: "IN1">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                                                Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                                                                Call:   Pragmas(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                                                                                  Visited token: <",">; Expected token: <<PRAGMA>>
+                                                                                Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                                                                Visited token: <",">; Expected token: <"(">
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Identifier
+                                                                                Consumed token: <<IDF>: "IN1">
+                                                                              Return: Identifier
+                                                                            Return: PrimaryExpression
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                                Consumed token: <",">
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Skipping character :   (32)
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN2) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<IDF>: "IN2">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<IDF>: "IN2">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                                                Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                                                                Call:   Pragmas(LOOKING AHEAD...)
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                                                                                  Visited token: <")">; Expected token: <<PRAGMA>>
+                                                                                Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                                                                Visited token: <")">; Expected token: <"(">
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Identifier
+                                                                                Consumed token: <<IDF>: "IN2">
+                                                                              Return: Identifier
+                                                                            Return: PrimaryExpression
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <")">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <")">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                              Return: ExpressionList
+                                              Consumed token: <")">
+                                            Return: Call
+                                          Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : - (45)
+   Currently matched the first 1 characters as a "-" token.
+   Possible string literal matches : { "->" } 
+Current character : - (45)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <token of kind 6> }
+Current character : - (45)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : p (112)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : r (114)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : m (109)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : d (100)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : c (99)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : l (108)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : c (99)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : u (117)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : l (108)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : r (114)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : l (108)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : o (111)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : m (109)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : m (109)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : d (100)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : l (108)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : m (109)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : n (110)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : d (100)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 2 (50)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : b (98)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : l (108)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : u (117)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : x (120)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : d (100)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : \' (39)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : n (110)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : r (114)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : \n (10)
+   Currently matched the first 68 characters as a <token of kind 6> token.
+****** FOUND A <token of kind 6> MATCH (-- permet de calculer la somme des elements des 2 tableaux d\'entree\n) ******
+
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : b (98)
+   Possible string literal matches : { "body", "boolred" } 
+Current character : i (105)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 5 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (bidon) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "bidon">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                        Visited token: <",">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <",">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                  Consumed token: <",">
+                  Call:   Left
+                    Call:   Identifier
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : f (102)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 9 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_fill1) ******
+
+                      Consumed token: <<IDF>: "out_fill1">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                        Visited token: <",">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <",">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                  Consumed token: <",">
+                  Call:   Left
+                    Call:   Identifier
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : f (102)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : l (108)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 9 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_fill2) ******
+
+                      Consumed token: <<IDF>: "out_fill2">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : f (102)
+   Possible string literal matches : { "function", "fill" } 
+Current character : i (105)
+   Possible string literal matches : { "fill" } 
+Current character : l (108)
+   Possible string literal matches : { "fill" } 
+Current character : l (108)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "fill" token.
+Current character : < (60)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : < (60)
+   Currently matched the first 4 characters as a "fill" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "fill" MATCH (fill) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <"fill">; Expected token: <<IDFIER>>
+                                                  Visited token: <"fill">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD FAILED)
+                                                Call:   IterOp(LOOKING AHEAD...)
+                                                  Visited token: <"fill">; Expected token: <"map">
+                                                  Visited token: <"fill">; Expected token: <"red">
+                                                  Visited token: <"fill">; Expected token: <"fill">
+                                                  Call:   IterParam(LOOKING AHEAD...)
+Current character : < (60)
+   Currently matched the first 1 characters as a "<" token.
+   Possible string literal matches : { "<>", "<=", "<<" } 
+Current character : < (60)
+   No more string literal token matches are possible.
+   Currently matched the first 2 characters as a "<<" token.
+****** FOUND A "<<" MATCH (<<) ******
+
+                                                    Visited token: <"<<">; Expected token: <"<<">
+                                                    Call:   PredefOp(LOOKING AHEAD...)
+Current character : f (102)
+   Possible string literal matches : { "function", "fill" } 
+Current character : i (105)
+   Possible string literal matches : { "fill" } 
+Current character : l (108)
+   Possible string literal matches : { "fill" } 
+Current character : l (108)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "fill" token.
+Current character : e (101)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 6 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (filled) ******
+
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"+">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"-">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"div">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"*">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"/">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"and">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"or">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"xor">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"=>">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"not">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"nor">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"#">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"<">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <">">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"<=">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <">=">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"=">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"<>">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"|">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"->">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"mod">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"when">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"pre">
+                                                      Visited token: <<IDF>: "filled">; Expected token: <"if">
+                                                    Return: PredefOp(LOOKAHEAD FAILED)
+                                                    Call:   UserOp(LOOKING AHEAD...)
+                                                      Call:   Identifier(LOOKING AHEAD...)
+                                                        Visited token: <<IDF>: "filled">; Expected token: <<IDFIER>>
+                                                        Visited token: <<IDF>: "filled">; Expected token: <<IDF>>
+                                                      Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                    Return: UserOp(LOOKAHEAD SUCCEEDED)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                    Visited token: <";">; Expected token: <",">
+                                                    Visited token: <";">; Expected token: <";">
+                                                  Return: IterParam(LOOKAHEAD SUCCEEDED)
+                                                Return: IterOp(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                            Return: Call(LOOKAHEAD SUCCEEDED)
+                                            Call:   Call
+                                              Call:   UserOp
+                                                Call:   IterOp
+                                                  Consumed token: <"fill">
+                                                  Call:   IterParam
+                                                    Consumed token: <"<<">
+                                                    Call:   UserOp
+                                                      Call:   Identifier
+                                                        Consumed token: <<IDF>: "filled">
+                                                      Return: Identifier
+                                                    Return: UserOp
+                                                    Consumed token: <";">
+                                                    Call:   Expression
+                                                      Call:   ConcatExpression
+                                                        Call:   ArrowExpression
+                                                          Call:   ImpliesExpression
+                                                            Call:   OrExpression
+                                                              Call:   AndExpression
+                                                                Call:   EgalExpression
+                                                                  Call:   CompExpression
+                                                                    Call:   AdditiveExpression
+                                                                      Call:   MultiplicativeExpression
+                                                                        Call:   WhenExpression
+                                                                          Call:   UnaryExpression
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : > (62)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                                                                            Call:   SelectExpression
+                                                                              Call:   ImplicitArray
+                                                                                Call:   PrimaryExpression
+                                                                                  Call:   Call(LOOKING AHEAD...)
+                                                                                    Call:   UserOp(LOOKING AHEAD...)
+                                                                                      Call:   Identifier(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                                                                                      Return: Identifier(LOOKAHEAD FAILED)
+                                                                                      Call:   IterOp(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                                                                                      Return: IterOp(LOOKAHEAD FAILED)
+                                                                                      Call:   BoolRedOp(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                                                                                      Return: BoolRedOp(LOOKAHEAD FAILED)
+                                                                                    Return: UserOp(LOOKAHEAD FAILED)
+                                                                                  Return: Call(LOOKAHEAD FAILED)
+                                                                                  Call:   Value
+                                                                                    Consumed token: <<VAL_INT>: "10">
+                                                                                  Return: Value
+                                                                                Return: PrimaryExpression
+Current character : > (62)
+   Currently matched the first 1 characters as a ">" token.
+   Possible string literal matches : { ">=", ">>" } 
+Current character : > (62)
+   No more string literal token matches are possible.
+   Currently matched the first 2 characters as a ">>" token.
+****** FOUND A ">>" MATCH (>>) ******
+
+                                                                              Return: ImplicitArray
+                                                                              Call:   Selector
+                                                                                Call:   StructAccess(LOOKING AHEAD...)
+                                                                                  Visited token: <">>">; Expected token: <".">
+                                                                                Return: StructAccess(LOOKAHEAD FAILED)
+                                                                                Call:   TabAccess(LOOKING AHEAD...)
+                                                                                  Visited token: <">>">; Expected token: <"[">
+                                                                                Return: TabAccess(LOOKAHEAD FAILED)
+                                                                              Return: Selector
+                                                                            Return: SelectExpression
+                                                                          Return: UnaryExpression
+                                                                        Return: WhenExpression
+                                                                      Return: MultiplicativeExpression
+                                                                    Return: AdditiveExpression
+                                                                  Return: CompExpression
+                                                                Return: EgalExpression
+                                                              Return: AndExpression
+                                                            Return: OrExpression
+                                                          Return: ImpliesExpression
+                                                        Return: ArrowExpression
+                                                      Return: ConcatExpression
+                                                    Return: Expression
+                                                    Consumed token: <">>">
+                                                  Return: IterParam
+                                                Return: IterOp
+                                              Return: UserOp
+                                              Call:   Pragmas
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : 0 (48)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : 0 (48)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+                                                Visited token: <"(">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas
+                                              Consumed token: <"(">
+                                              Call:   ExpressionList
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Current character : 0 (48)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 0 (48)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : ) (41)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (0) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD FAILED)
+                                                                                  Call:   IterOp(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"map">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"red">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"fill">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"map_red">
+                                                                                  Return: IterOp(LOOKAHEAD FAILED)
+                                                                                  Call:   BoolRedOp(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"boolred">
+                                                                                  Return: BoolRedOp(LOOKAHEAD FAILED)
+                                                                                Return: UserOp(LOOKAHEAD FAILED)
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Value
+                                                                                Consumed token: <<VAL_INT>: "0">
+                                                                              Return: Value
+                                                                            Return: PrimaryExpression
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <")">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <")">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                              Return: ExpressionList
+                                              Consumed token: <")">
+                                            Return: Call
+                                          Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : - (45)
+   Currently matched the first 1 characters as a "-" token.
+   Possible string literal matches : { "->" } 
+Current character : - (45)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <token of kind 6> }
+Current character : - (45)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : c (99)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : o (111)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : n (110)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : s (115)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : r (114)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : u (117)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : i (105)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : [ (91)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 0 (48)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : , (44)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : , (44)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 2 (50)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : , (44)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : . (46)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : . (46)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : . (46)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : , (44)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 9 (57)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : ] (93)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : t (116)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : [ (91)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 0 (48)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : , (44)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 2 (50)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : , (44)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 4 (52)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : , (44)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : . (46)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : . (46)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : . (46)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : , (44)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character :   (32)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : 8 (56)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : ] (93)
+   Currently matched the first 1 characters as a "-" token.
+   Possible kinds of longer matches : { <token of kind 6> }
+Current character : \n (10)
+   Currently matched the first 55 characters as a <token of kind 6> token.
+****** FOUND A <token of kind 6> MATCH (-- construit [0, 1, 2, ... , 9] et [0, 2, 4, ... , 18]\n) ******
+
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred1) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "out_mapred1">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                        Visited token: <",">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <",">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                  Consumed token: <",">
+                  Call:   Left
+                    Call:   Identifier
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred2) ******
+
+                      Consumed token: <<IDF>: "out_mapred2">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                        Visited token: <",">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <",">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                  Consumed token: <",">
+                  Call:   Left
+                    Call:   Identifier
+Skipping character :   (32)
+Current character : o (111)
+   Possible string literal matches : { "of", "or" } 
+Current character : u (117)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : m (109)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : a (97)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : r (114)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 3 (51)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 11 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (out_mapred3) ******
+
+                      Consumed token: <<IDF>: "out_mapred3">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                        Visited token: <",">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <",">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                  Consumed token: <",">
+                  Call:   Left
+                    Call:   Identifier
+Skipping character :   (32)
+Current character : O (79)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : O (79)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : U (85)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : T (84)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (OUT) ******
+
+                      Consumed token: <<IDF>: "OUT">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : m (109)
+   Possible string literal matches : { "model", "mirror", "map", "map_red", 
+     "mod" } 
+Current character : a (97)
+   Possible string literal matches : { "map", "map_red" } 
+Current character : p (112)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : _ (95)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : r (114)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : e (101)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : d (100)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "map_red" token.
+Current character : < (60)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : < (60)
+   Currently matched the first 7 characters as a "map_red" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "map_red" MATCH (map_red) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <"map_red">; Expected token: <<IDFIER>>
+                                                  Visited token: <"map_red">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD FAILED)
+                                                Call:   IterOp(LOOKING AHEAD...)
+                                                  Visited token: <"map_red">; Expected token: <"map">
+                                                  Visited token: <"map_red">; Expected token: <"red">
+                                                  Visited token: <"map_red">; Expected token: <"fill">
+                                                  Visited token: <"map_red">; Expected token: <"map_red">
+                                                  Call:   IterParam(LOOKING AHEAD...)
+Current character : < (60)
+   Currently matched the first 1 characters as a "<" token.
+   Possible string literal matches : { "<>", "<=", "<<" } 
+Current character : < (60)
+   No more string literal token matches are possible.
+   Currently matched the first 2 characters as a "<<" token.
+****** FOUND A "<<" MATCH (<<) ******
+
+                                                    Visited token: <"<<">; Expected token: <"<<">
+                                                    Call:   PredefOp(LOOKING AHEAD...)
+Current character : m (109)
+   Possible string literal matches : { "model", "mirror", "map", "map_red", 
+     "mod" } 
+Current character : a (97)
+   Possible string literal matches : { "map", "map_red" } 
+Current character : p (112)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : _ (95)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : r (114)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : e (101)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : d (100)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "map_red" token.
+Current character : d (100)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 12 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 12 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (map_redduced) ******
+
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"+">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"-">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"div">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"*">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"/">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"and">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"or">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"xor">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"=>">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"not">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"nor">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"#">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"<">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <">">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"<=">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <">=">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"=">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"<>">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"|">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"->">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"mod">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"when">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"pre">
+                                                      Visited token: <<IDF>: "map_redduced">; Expected token: <"if">
+                                                    Return: PredefOp(LOOKAHEAD FAILED)
+                                                    Call:   UserOp(LOOKING AHEAD...)
+                                                      Call:   Identifier(LOOKING AHEAD...)
+                                                        Visited token: <<IDF>: "map_redduced">; Expected token: <<IDFIER>>
+                                                        Visited token: <<IDF>: "map_redduced">; Expected token: <<IDF>>
+                                                      Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                    Return: UserOp(LOOKAHEAD SUCCEEDED)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                    Visited token: <";">; Expected token: <",">
+                                                    Visited token: <";">; Expected token: <";">
+                                                  Return: IterParam(LOOKAHEAD SUCCEEDED)
+                                                Return: IterOp(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                            Return: Call(LOOKAHEAD SUCCEEDED)
+                                            Call:   Call
+                                              Call:   UserOp
+                                                Call:   IterOp
+                                                  Consumed token: <"map_red">
+                                                  Call:   IterParam
+                                                    Consumed token: <"<<">
+                                                    Call:   UserOp
+                                                      Call:   Identifier
+                                                        Consumed token: <<IDF>: "map_redduced">
+                                                      Return: Identifier
+                                                    Return: UserOp
+                                                    Consumed token: <";">
+                                                    Call:   Expression
+                                                      Call:   ConcatExpression
+                                                        Call:   ArrowExpression
+                                                          Call:   ImpliesExpression
+                                                            Call:   OrExpression
+                                                              Call:   AndExpression
+                                                                Call:   EgalExpression
+                                                                  Call:   CompExpression
+                                                                    Call:   AdditiveExpression
+                                                                      Call:   MultiplicativeExpression
+                                                                        Call:   WhenExpression
+                                                                          Call:   UnaryExpression
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : 0 (48)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_REAL>, <VAL_INT> }
+Current character : > (62)
+   Currently matched the first 2 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (10) ******
+
+                                                                            Call:   SelectExpression
+                                                                              Call:   ImplicitArray
+                                                                                Call:   PrimaryExpression
+                                                                                  Call:   Call(LOOKING AHEAD...)
+                                                                                    Call:   UserOp(LOOKING AHEAD...)
+                                                                                      Call:   Identifier(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <<IDFIER>>
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <<IDF>>
+                                                                                      Return: Identifier(LOOKAHEAD FAILED)
+                                                                                      Call:   IterOp(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"map">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"red">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"fill">
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"map_red">
+                                                                                      Return: IterOp(LOOKAHEAD FAILED)
+                                                                                      Call:   BoolRedOp(LOOKING AHEAD...)
+                                                                                        Visited token: <<VAL_INT>: "10">; Expected token: <"boolred">
+                                                                                      Return: BoolRedOp(LOOKAHEAD FAILED)
+                                                                                    Return: UserOp(LOOKAHEAD FAILED)
+                                                                                  Return: Call(LOOKAHEAD FAILED)
+                                                                                  Call:   Value
+                                                                                    Consumed token: <<VAL_INT>: "10">
+                                                                                  Return: Value
+                                                                                Return: PrimaryExpression
+Current character : > (62)
+   Currently matched the first 1 characters as a ">" token.
+   Possible string literal matches : { ">=", ">>" } 
+Current character : > (62)
+   No more string literal token matches are possible.
+   Currently matched the first 2 characters as a ">>" token.
+****** FOUND A ">>" MATCH (>>) ******
+
+                                                                              Return: ImplicitArray
+                                                                              Call:   Selector
+                                                                                Call:   StructAccess(LOOKING AHEAD...)
+                                                                                  Visited token: <">>">; Expected token: <".">
+                                                                                Return: StructAccess(LOOKAHEAD FAILED)
+                                                                                Call:   TabAccess(LOOKING AHEAD...)
+                                                                                  Visited token: <">>">; Expected token: <"[">
+                                                                                Return: TabAccess(LOOKAHEAD FAILED)
+                                                                              Return: Selector
+                                                                            Return: SelectExpression
+                                                                          Return: UnaryExpression
+                                                                        Return: WhenExpression
+                                                                      Return: MultiplicativeExpression
+                                                                    Return: AdditiveExpression
+                                                                  Return: CompExpression
+                                                                Return: EgalExpression
+                                                              Return: AndExpression
+                                                            Return: OrExpression
+                                                          Return: ImpliesExpression
+                                                        Return: ArrowExpression
+                                                      Return: ConcatExpression
+                                                    Return: Expression
+                                                    Consumed token: <">>">
+                                                  Return: IterParam
+                                                Return: IterOp
+                                              Return: UserOp
+                                              Call:   Pragmas
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : 0 (48)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : 0 (48)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+                                                Visited token: <"(">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas
+                                              Consumed token: <"(">
+                                              Call:   ExpressionList
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Current character : 0 (48)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 0 (48)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : , (44)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (0) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD FAILED)
+                                                                                  Call:   IterOp(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"map">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"red">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"fill">
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"map_red">
+                                                                                  Return: IterOp(LOOKAHEAD FAILED)
+                                                                                  Call:   BoolRedOp(LOOKING AHEAD...)
+                                                                                    Visited token: <<VAL_INT>: "0">; Expected token: <"boolred">
+                                                                                  Return: BoolRedOp(LOOKAHEAD FAILED)
+                                                                                Return: UserOp(LOOKAHEAD FAILED)
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Value
+                                                                                Consumed token: <<VAL_INT>: "0">
+                                                                              Return: Value
+                                                                            Return: PrimaryExpression
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                                Consumed token: <",">
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Skipping character :   (32)
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN1) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<IDF>: "IN1">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<IDF>: "IN1">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                                                Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                                                                Call:   Pragmas(LOOKING AHEAD...)
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                                                                                  Visited token: <",">; Expected token: <<PRAGMA>>
+                                                                                Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                                                                Visited token: <",">; Expected token: <"(">
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Identifier
+                                                                                Consumed token: <<IDF>: "IN1">
+                                                                              Return: Identifier
+                                                                            Return: PrimaryExpression
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <",">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                                Consumed token: <",">
+                                                Call:   Expression
+                                                  Call:   ConcatExpression
+                                                    Call:   ArrowExpression
+                                                      Call:   ImpliesExpression
+                                                        Call:   OrExpression
+                                                          Call:   AndExpression
+                                                            Call:   EgalExpression
+                                                              Call:   CompExpression
+                                                                Call:   AdditiveExpression
+                                                                  Call:   MultiplicativeExpression
+                                                                    Call:   WhenExpression
+                                                                      Call:   UnaryExpression
+Skipping character :   (32)
+Current character : I (73)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : I (73)
+   Currently matched the first 1 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : N (78)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (IN2) ******
+
+                                                                        Call:   SelectExpression
+                                                                          Call:   ImplicitArray
+                                                                            Call:   PrimaryExpression
+                                                                              Call:   Call(LOOKING AHEAD...)
+                                                                                Call:   UserOp(LOOKING AHEAD...)
+                                                                                  Call:   Identifier(LOOKING AHEAD...)
+                                                                                    Visited token: <<IDF>: "IN2">; Expected token: <<IDFIER>>
+                                                                                    Visited token: <<IDF>: "IN2">; Expected token: <<IDF>>
+                                                                                  Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                                                                Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                                                                Call:   Pragmas(LOOKING AHEAD...)
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                                                                                  Visited token: <")">; Expected token: <<PRAGMA>>
+                                                                                Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                                                                Visited token: <")">; Expected token: <"(">
+                                                                              Return: Call(LOOKAHEAD FAILED)
+                                                                              Call:   Identifier
+                                                                                Consumed token: <<IDF>: "IN2">
+                                                                              Return: Identifier
+                                                                            Return: PrimaryExpression
+                                                                          Return: ImplicitArray
+                                                                          Call:   Selector
+                                                                            Call:   StructAccess(LOOKING AHEAD...)
+                                                                              Visited token: <")">; Expected token: <".">
+                                                                            Return: StructAccess(LOOKAHEAD FAILED)
+                                                                            Call:   TabAccess(LOOKING AHEAD...)
+                                                                              Visited token: <")">; Expected token: <"[">
+                                                                            Return: TabAccess(LOOKAHEAD FAILED)
+                                                                          Return: Selector
+                                                                        Return: SelectExpression
+                                                                      Return: UnaryExpression
+                                                                    Return: WhenExpression
+                                                                  Return: MultiplicativeExpression
+                                                                Return: AdditiveExpression
+                                                              Return: CompExpression
+                                                            Return: EgalExpression
+                                                          Return: AndExpression
+                                                        Return: OrExpression
+                                                      Return: ImpliesExpression
+                                                    Return: ArrowExpression
+                                                  Return: ConcatExpression
+                                                Return: Expression
+                                              Return: ExpressionList
+                                              Consumed token: <")">
+                                            Return: Call
+                                          Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Current character : t (116)
+   Possible string literal matches : { "type", "tel", "then" } 
+Current character : e (101)
+   Possible string literal matches : { "tel" } 
+Current character : l (108)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "tel" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "tel" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "tel" MATCH (tel) ******
+
+          Return: EquationList
+          Consumed token: <"tel">
+Skipping character : \n (10)
+Skipping character : \n (10)
+Skipping character : \n (10)
+Skipping character : \n (10)
+Current character : n (110)
+   Possible string literal matches : { "needs", "node", "nor", "not" } 
+Current character : o (111)
+   Possible string literal matches : { "node", "nor", "not" } 
+Current character : d (100)
+   Possible string literal matches : { "node" } 
+Current character : e (101)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "node" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 4 characters as a "node" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "node" MATCH (node) ******
+
+        Return: FNBody
+      Return: NodeDecl
+    Return: EntityDecl
+    Call:   EntityDecl
+      Call:   NodeDecl
+        Call:   NodeHeader
+          Consumed token: <"node">
+Skipping character :   (32)
+Current character : m (109)
+   Possible string literal matches : { "model", "mirror", "map", "map_red", 
+     "mod" } 
+Current character : a (97)
+   Possible string literal matches : { "map", "map_red" } 
+Current character : p (112)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : p (112)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : p (112)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ( (40)
+   Currently matched the first 6 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (mapped) ******
+
+          Consumed token: <<IDF>: "mapped">
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : e (101)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in1) ******
+
+                    Consumed token: <<IDF>: "elt_in1">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in2) ******
+
+                    Consumed token: <<IDF>: "elt_in2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+Skipping character :   (32)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : t (116)
+   Possible string literal matches : { "returns" } 
+Current character : u (117)
+   Possible string literal matches : { "returns" } 
+Current character : r (114)
+   Possible string literal matches : { "returns" } 
+Current character : n (110)
+   Possible string literal matches : { "returns" } 
+Current character : s (115)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "returns" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a "returns" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "returns" MATCH (returns) ******
+
+          Consumed token: <"returns">
+Skipping character :   (32)
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : e (101)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : e (101)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out1) ******
+
+                    Consumed token: <<IDF>: "elt_out1">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out2) ******
+
+                    Consumed token: <<IDF>: "elt_out2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+          Call:   Pragmas
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+            Visited token: <";">; Expected token: <<PRAGMA>>
+          Return: Pragmas
+          Consumed token: <";">
+        Return: NodeHeader
+Skipping character : \n (10)
+Current character : l (108)
+   Possible string literal matches : { "let" } 
+Current character : e (101)
+   Possible string literal matches : { "let" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "let" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "let" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "let" MATCH (let) ******
+
+        Call:   FNBody
+          Consumed token: <"let">
+          Call:   EquationList
+            Call:   EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out1) ******
+
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "elt_out1">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in1) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "elt_in1">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "elt_in1">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                Visited token: <";">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <";">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "elt_in1">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out2) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "elt_out2">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in2) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "elt_in2">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "elt_in2">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                Visited token: <";">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <";">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "elt_in2">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Current character : t (116)
+   Possible string literal matches : { "type", "tel", "then" } 
+Current character : e (101)
+   Possible string literal matches : { "tel" } 
+Current character : l (108)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "tel" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "tel" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "tel" MATCH (tel) ******
+
+          Return: EquationList
+          Consumed token: <"tel">
+Skipping character : \n (10)
+Skipping character : \n (10)
+Skipping character : \n (10)
+Skipping character : \n (10)
+Current character : n (110)
+   Possible string literal matches : { "needs", "node", "nor", "not" } 
+Current character : o (111)
+   Possible string literal matches : { "node", "nor", "not" } 
+Current character : d (100)
+   Possible string literal matches : { "node" } 
+Current character : e (101)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "node" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 4 characters as a "node" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "node" MATCH (node) ******
+
+        Return: FNBody
+      Return: NodeDecl
+    Return: EntityDecl
+    Call:   EntityDecl
+      Call:   NodeDecl
+        Call:   NodeHeader
+          Consumed token: <"node">
+Skipping character :   (32)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : d (100)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "red" token.
+Current character : d (100)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ( (40)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (redduced) ******
+
+          Consumed token: <<IDF>: "redduced">
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : a (97)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_in) ******
+
+                    Consumed token: <<IDF>: "accu_in">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Skipping character :   (32)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in1) ******
+
+                    Visited token: <<IDF>: "elt_in1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "elt_in1">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in2) ******
+
+                    Consumed token: <<IDF>: "elt_in2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+Skipping character :   (32)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : t (116)
+   Possible string literal matches : { "returns" } 
+Current character : u (117)
+   Possible string literal matches : { "returns" } 
+Current character : r (114)
+   Possible string literal matches : { "returns" } 
+Current character : n (110)
+   Possible string literal matches : { "returns" } 
+Current character : s (115)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "returns" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a "returns" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "returns" MATCH (returns) ******
+
+          Consumed token: <"returns">
+Skipping character :   (32)
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : a (97)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_out) ******
+
+                    Consumed token: <<IDF>: "accu_out">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+          Call:   Pragmas
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+            Visited token: <";">; Expected token: <<PRAGMA>>
+          Return: Pragmas
+          Consumed token: <";">
+        Return: NodeHeader
+Skipping character : \n (10)
+Current character : l (108)
+   Possible string literal matches : { "let" } 
+Current character : e (101)
+   Possible string literal matches : { "let" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "let" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "let" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "let" MATCH (let) ******
+
+        Call:   FNBody
+          Consumed token: <"let">
+          Call:   EquationList
+            Call:   EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_out) ******
+
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "accu_out">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_in) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : + (43)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "+" token.
+****** FOUND A "+" MATCH (+) ******
+
+                                                Visited token: <"+">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <"+">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "accu_in">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                                Consumed token: <"+">
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in1) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "elt_in1">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "elt_in1">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : + (43)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "+" token.
+****** FOUND A "+" MATCH (+) ******
+
+                                                Visited token: <"+">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <"+">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "elt_in1">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                                Consumed token: <"+">
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in2) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "elt_in2">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "elt_in2">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                Visited token: <";">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <";">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "elt_in2">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Current character : t (116)
+   Possible string literal matches : { "type", "tel", "then" } 
+Current character : e (101)
+   Possible string literal matches : { "tel" } 
+Current character : l (108)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "tel" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "tel" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "tel" MATCH (tel) ******
+
+          Return: EquationList
+          Consumed token: <"tel">
+Skipping character : \n (10)
+Skipping character : \n (10)
+Skipping character : \n (10)
+Current character : n (110)
+   Possible string literal matches : { "needs", "node", "nor", "not" } 
+Current character : o (111)
+   Possible string literal matches : { "node", "nor", "not" } 
+Current character : d (100)
+   Possible string literal matches : { "node" } 
+Current character : e (101)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "node" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 4 characters as a "node" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "node" MATCH (node) ******
+
+        Return: FNBody
+      Return: NodeDecl
+    Return: EntityDecl
+    Call:   EntityDecl
+      Call:   NodeDecl
+        Call:   NodeHeader
+          Consumed token: <"node">
+Skipping character :   (32)
+Current character : f (102)
+   Possible string literal matches : { "function", "fill" } 
+Current character : i (105)
+   Possible string literal matches : { "fill" } 
+Current character : l (108)
+   Possible string literal matches : { "fill" } 
+Current character : l (108)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "fill" token.
+Current character : e (101)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ( (40)
+   Currently matched the first 6 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (filled) ******
+
+          Consumed token: <<IDF>: "filled">
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : a (97)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_in) ******
+
+                    Consumed token: <<IDF>: "accu_in">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+Skipping character :   (32)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : t (116)
+   Possible string literal matches : { "returns" } 
+Current character : u (117)
+   Possible string literal matches : { "returns" } 
+Current character : r (114)
+   Possible string literal matches : { "returns" } 
+Current character : n (110)
+   Possible string literal matches : { "returns" } 
+Current character : s (115)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "returns" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a "returns" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "returns" MATCH (returns) ******
+
+          Consumed token: <"returns">
+Skipping character :   (32)
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : a (97)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_out) ******
+
+                    Consumed token: <<IDF>: "accu_out">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out1) ******
+
+                    Visited token: <<IDF>: "elt_out1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "elt_out1">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out2) ******
+
+                    Consumed token: <<IDF>: "elt_out2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+          Call:   Pragmas
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+            Visited token: <";">; Expected token: <<PRAGMA>>
+          Return: Pragmas
+          Consumed token: <";">
+        Return: NodeHeader
+Skipping character : \n (10)
+Current character : l (108)
+   Possible string literal matches : { "let" } 
+Current character : e (101)
+   Possible string literal matches : { "let" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "let" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "let" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "let" MATCH (let) ******
+
+        Call:   FNBody
+          Consumed token: <"let">
+          Call:   EquationList
+            Call:   EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_out) ******
+
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "accu_out">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_in) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : + (43)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "+" token.
+****** FOUND A "+" MATCH (+) ******
+
+                                                Visited token: <"+">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <"+">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "accu_in">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                                Consumed token: <"+">
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : ; (59)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (1) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <<IDFIER>>
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD FAILED)
+                                                Call:   IterOp(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"map">
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"red">
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"fill">
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"map_red">
+                                                Return: IterOp(LOOKAHEAD FAILED)
+                                                Call:   BoolRedOp(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"boolred">
+                                                Return: BoolRedOp(LOOKAHEAD FAILED)
+                                              Return: UserOp(LOOKAHEAD FAILED)
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Value
+                                              Consumed token: <<VAL_INT>: "1">
+                                            Return: Value
+                                          Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out1) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "elt_out1">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_in) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                Visited token: <";">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <";">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "accu_in">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out2) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "elt_out2">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_in) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : * (42)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "*" token.
+****** FOUND A "*" MATCH (*) ******
+
+                                                Visited token: <"*">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <"*">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "accu_in">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <"*">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <"*">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                  Consumed token: <"*">
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : 2 (50)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 2 (50)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : ; (59)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (2) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "2">; Expected token: <<IDFIER>>
+                                                  Visited token: <<VAL_INT>: "2">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD FAILED)
+                                                Call:   IterOp(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "2">; Expected token: <"map">
+                                                  Visited token: <<VAL_INT>: "2">; Expected token: <"red">
+                                                  Visited token: <<VAL_INT>: "2">; Expected token: <"fill">
+                                                  Visited token: <<VAL_INT>: "2">; Expected token: <"map_red">
+                                                Return: IterOp(LOOKAHEAD FAILED)
+                                                Call:   BoolRedOp(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "2">; Expected token: <"boolred">
+                                                Return: BoolRedOp(LOOKAHEAD FAILED)
+                                              Return: UserOp(LOOKAHEAD FAILED)
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Value
+                                              Consumed token: <<VAL_INT>: "2">
+                                            Return: Value
+                                          Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Current character : t (116)
+   Possible string literal matches : { "type", "tel", "then" } 
+Current character : e (101)
+   Possible string literal matches : { "tel" } 
+Current character : l (108)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "tel" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "tel" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "tel" MATCH (tel) ******
+
+          Return: EquationList
+          Consumed token: <"tel">
+Skipping character : \n (10)
+Skipping character : \n (10)
+Skipping character : \n (10)
+Current character : n (110)
+   Possible string literal matches : { "needs", "node", "nor", "not" } 
+Current character : o (111)
+   Possible string literal matches : { "node", "nor", "not" } 
+Current character : d (100)
+   Possible string literal matches : { "node" } 
+Current character : e (101)
+   No more string literal token matches are possible.
+   Currently matched the first 4 characters as a "node" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 4 characters as a "node" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "node" MATCH (node) ******
+
+        Return: FNBody
+      Return: NodeDecl
+    Return: EntityDecl
+    Call:   EntityDecl
+      Call:   NodeDecl
+        Call:   NodeHeader
+          Consumed token: <"node">
+Skipping character :   (32)
+Current character : m (109)
+   Possible string literal matches : { "model", "mirror", "map", "map_red", 
+     "mod" } 
+Current character : a (97)
+   Possible string literal matches : { "map", "map_red" } 
+Current character : p (112)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : _ (95)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : r (114)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : e (101)
+   Currently matched the first 3 characters as a "map" token.
+   Possible string literal matches : { "map_red" } 
+Current character : d (100)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "map_red" token.
+Current character : d (100)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 9 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 10 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : e (101)
+   Currently matched the first 11 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : d (100)
+   Currently matched the first 12 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ( (40)
+   Currently matched the first 12 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (map_redduced) ******
+
+          Consumed token: <<IDF>: "map_redduced">
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : a (97)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_in) ******
+
+                    Consumed token: <<IDF>: "accu_in">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Skipping character :   (32)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in1) ******
+
+                    Visited token: <<IDF>: "elt_in1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "elt_in1">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in2) ******
+
+                    Consumed token: <<IDF>: "elt_in2">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+Skipping character :   (32)
+Current character : r (114)
+   Possible string literal matches : { "returns", "red" } 
+Current character : e (101)
+   Possible string literal matches : { "returns", "red" } 
+Current character : t (116)
+   Possible string literal matches : { "returns" } 
+Current character : u (117)
+   Possible string literal matches : { "returns" } 
+Current character : r (114)
+   Possible string literal matches : { "returns" } 
+Current character : n (110)
+   Possible string literal matches : { "returns" } 
+Current character : s (115)
+   No more string literal token matches are possible.
+   Currently matched the first 7 characters as a "returns" token.
+Current character :   (32)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a "returns" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "returns" MATCH (returns) ******
+
+          Consumed token: <"returns">
+Skipping character :   (32)
+Current character : ( (40)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "(" token.
+Current character : a (97)
+   Starting NFA to match one of : { <token of kind 7> }
+Current character : a (97)
+   Currently matched the first 1 characters as a "(" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "(" MATCH (() ******
+
+          Consumed token: <"(">
+          Call:   FNParam
+            Call:   VarDeclList
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_out) ******
+
+                    Consumed token: <<IDF>: "accu_out">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <";">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <";">; Expected token: <";">
+              Call:   VarDecl(LOOKING AHEAD...)
+                Call:   IdentList(LOOKING AHEAD...)
+                  Call:   Ident(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out1) ******
+
+                    Visited token: <<IDF>: "elt_out1">; Expected token: <<IDF>>
+                  Return: Ident(LOOKAHEAD SUCCEEDED)
+                Return: IdentList(LOOKAHEAD SUCCEEDED)
+              Return: VarDecl(LOOKAHEAD SUCCEEDED)
+              Consumed token: <";">
+              Call:   VarDecl
+                Call:   IdentList
+                  Call:   Ident
+                    Consumed token: <<IDF>: "elt_out1">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : , (44)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out2) ******
+
+                    Consumed token: <<IDF>: "elt_out2">
+                  Return: Ident
+Current character : , (44)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "," token.
+****** FOUND A "," MATCH (,) ******
+
+                  Consumed token: <",">
+                  Call:   Ident
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 3 (51)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out3) ******
+
+                    Consumed token: <<IDF>: "elt_out3">
+                  Return: Ident
+Skipping character :   (32)
+Current character : : (58)
+   Currently matched the first 1 characters as a ":" token.
+   Possible string literal matches : { "::" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a ":" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A ":" MATCH (:) ******
+
+                Return: IdentList
+                Consumed token: <":">
+                Call:   TypeExpr
+                  Call:   TypeBasic
+Skipping character :   (32)
+Current character : i (105)
+   Possible string literal matches : { "is", "if" } 
+Current character : n (110)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ) (41)
+   Currently matched the first 3 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (int) ******
+
+                    Call:   TypeIdent
+                      Call:   Identifier
+                        Consumed token: <<IDF>: "int">
+                      Return: Identifier
+                    Return: TypeIdent
+                  Return: TypeBasic
+Current character : ) (41)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ")" token.
+****** FOUND A ")" MATCH ()) ******
+
+                Return: TypeExpr
+                Call:   Pragmas
+                  Visited token: <")">; Expected token: <<PRAGMA>>
+                Return: Pragmas
+              Return: VarDecl
+              Visited token: <")">; Expected token: <";">
+            Return: VarDeclList
+          Return: FNParam
+          Consumed token: <")">
+          Call:   Pragmas
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+            Visited token: <";">; Expected token: <<PRAGMA>>
+          Return: Pragmas
+          Consumed token: <";">
+        Return: NodeHeader
+Skipping character : \n (10)
+Current character : l (108)
+   Possible string literal matches : { "let" } 
+Current character : e (101)
+   Possible string literal matches : { "let" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "let" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "let" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "let" MATCH (let) ******
+
+        Call:   FNBody
+          Consumed token: <"let">
+          Call:   EquationList
+            Call:   EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_out) ******
+
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "accu_out">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : a (97)
+   Possible string literal matches : { "assert", "and" } 
+Current character : c (99)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 2 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : c (99)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (accu_in) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "accu_in">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : + (43)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "+" token.
+****** FOUND A "+" MATCH (+) ******
+
+                                                Visited token: <"+">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <"+">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "accu_in">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                                Consumed token: <"+">
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : 1 (49)
+   No string literal matches possible.
+   Starting NFA to match one of : { <token of kind 6>, <token of kind 7>, <token of kind 8>, <FILE>, 
+     <LETTER>, <SYMB>, <PRAGMA>, <VAL_INT>, <IDF> }
+Current character : 1 (49)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Possible kinds of longer matches : { <VAL_INT>, <VAL_REAL> }
+Current character : ; (59)
+   Currently matched the first 1 characters as a <VAL_INT> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <VAL_INT> MATCH (1) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <<IDFIER>>
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD FAILED)
+                                                Call:   IterOp(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"map">
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"red">
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"fill">
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"map_red">
+                                                Return: IterOp(LOOKAHEAD FAILED)
+                                                Call:   BoolRedOp(LOOKING AHEAD...)
+                                                  Visited token: <<VAL_INT>: "1">; Expected token: <"boolred">
+                                                Return: BoolRedOp(LOOKAHEAD FAILED)
+                                              Return: UserOp(LOOKAHEAD FAILED)
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Value
+                                              Consumed token: <<VAL_INT>: "1">
+                                            Return: Value
+                                          Return: PrimaryExpression
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out1) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "elt_out1">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in1) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "elt_in1">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "elt_in1">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                Visited token: <";">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <";">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "elt_in1">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out2) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "elt_out2">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in2) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "elt_in2">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "elt_in2">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                Visited token: <";">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <";">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "elt_in2">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Skipping character :   (32)
+Skipping character :   (32)
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : o (111)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : u (117)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 3 (51)
+   Currently matched the first 8 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 8 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_out3) ******
+
+            Call:   EquOrAst
+              Call:   LeftPart
+                Call:   LeftList
+                  Call:   Left
+                    Call:   Identifier
+                      Consumed token: <<IDF>: "elt_out3">
+                    Return: Identifier
+                    Call:   Selector
+                      Call:   StructAccess(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : = (61)
+   Currently matched the first 1 characters as a "=" token.
+   Possible string literal matches : { "=>" } 
+Current character :   (32)
+   No string literal matches possible.
+   No more string literal token matches are possible.
+   Starting NFA to match one of : {  }
+Current character :   (32)
+   Currently matched the first 1 characters as a "=" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "=" MATCH (=) ******
+
+                        Visited token: <"=">; Expected token: <".">
+                      Return: StructAccess(LOOKAHEAD FAILED)
+                      Call:   TabAccess(LOOKING AHEAD...)
+                        Visited token: <"=">; Expected token: <"[">
+                      Return: TabAccess(LOOKAHEAD FAILED)
+                    Return: Selector
+                  Return: Left
+                Return: LeftList
+              Return: LeftPart
+              Consumed token: <"=">
+              Call:   Expression
+                Call:   ConcatExpression
+                  Call:   ArrowExpression
+                    Call:   ImpliesExpression
+                      Call:   OrExpression
+                        Call:   AndExpression
+                          Call:   EgalExpression
+                            Call:   CompExpression
+                              Call:   AdditiveExpression
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 1 (49)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character :   (32)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in1) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "elt_in1">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "elt_in1">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Skipping character :   (32)
+Current character : + (43)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a "+" token.
+****** FOUND A "+" MATCH (+) ******
+
+                                                Visited token: <"+">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <"+">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "elt_in1">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <"+">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                                Consumed token: <"+">
+                                Call:   MultiplicativeExpression
+                                  Call:   WhenExpression
+                                    Call:   UnaryExpression
+Skipping character :   (32)
+Current character : e (101)
+   Possible string literal matches : { "end", "else", "enum", "esac" } 
+Current character : l (108)
+   Possible string literal matches : { "else" } 
+Current character : t (116)
+   No more string literal token matches are possible.
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : t (116)
+   Currently matched the first 3 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : _ (95)
+   Currently matched the first 4 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : i (105)
+   Currently matched the first 5 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : n (110)
+   Currently matched the first 6 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : 2 (50)
+   Currently matched the first 7 characters as a <IDF> token.
+   Possible kinds of longer matches : { <IDF>, <IDFIER> }
+Current character : ; (59)
+   Currently matched the first 7 characters as a <IDF> token.
+   Putting back 1 characters into the input stream.
+****** FOUND A <IDF> MATCH (elt_in2) ******
+
+                                      Call:   SelectExpression
+                                        Call:   ImplicitArray
+                                          Call:   PrimaryExpression
+                                            Call:   Call(LOOKING AHEAD...)
+                                              Call:   UserOp(LOOKING AHEAD...)
+                                                Call:   Identifier(LOOKING AHEAD...)
+                                                  Visited token: <<IDF>: "elt_in2">; Expected token: <<IDFIER>>
+                                                  Visited token: <<IDF>: "elt_in2">; Expected token: <<IDF>>
+                                                Return: Identifier(LOOKAHEAD SUCCEEDED)
+                                              Return: UserOp(LOOKAHEAD SUCCEEDED)
+                                              Call:   Pragmas(LOOKING AHEAD...)
+Current character : ; (59)
+   No more string literal token matches are possible.
+   Currently matched the first 1 characters as a ";" token.
+****** FOUND A ";" MATCH (;) ******
+
+                                                Visited token: <";">; Expected token: <<PRAGMA>>
+                                              Return: Pragmas(LOOKAHEAD SUCCEEDED)
+                                              Visited token: <";">; Expected token: <"(">
+                                            Return: Call(LOOKAHEAD FAILED)
+                                            Call:   Identifier
+                                              Consumed token: <<IDF>: "elt_in2">
+                                            Return: Identifier
+                                          Return: PrimaryExpression
+                                        Return: ImplicitArray
+                                        Call:   Selector
+                                          Call:   StructAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <".">
+                                          Return: StructAccess(LOOKAHEAD FAILED)
+                                          Call:   TabAccess(LOOKING AHEAD...)
+                                            Visited token: <";">; Expected token: <"[">
+                                          Return: TabAccess(LOOKAHEAD FAILED)
+                                        Return: Selector
+                                      Return: SelectExpression
+                                    Return: UnaryExpression
+                                  Return: WhenExpression
+                                Return: MultiplicativeExpression
+                              Return: AdditiveExpression
+                            Return: CompExpression
+                          Return: EgalExpression
+                        Return: AndExpression
+                      Return: OrExpression
+                    Return: ImpliesExpression
+                  Return: ArrowExpression
+                Return: ConcatExpression
+              Return: Expression
+              Call:   Pragmas
+                Visited token: <";">; Expected token: <<PRAGMA>>
+              Return: Pragmas
+              Consumed token: <";">
+            Return: EquOrAst
+Skipping character : \n (10)
+Current character : t (116)
+   Possible string literal matches : { "type", "tel", "then" } 
+Current character : e (101)
+   Possible string literal matches : { "tel" } 
+Current character : l (108)
+   No more string literal token matches are possible.
+   Currently matched the first 3 characters as a "tel" token.
+Current character : \n (10)
+   Starting NFA to match one of : { <IDF>, <IDFIER> }
+Current character : \n (10)
+   Currently matched the first 3 characters as a "tel" token.
+   Putting back 1 characters into the input stream.
+****** FOUND A "tel" MATCH (tel) ******
+
+          Return: EquationList
+          Consumed token: <"tel">
+Skipping character : \n (10)
+Returning the <EOF> token.
+        Return: FNBody
+      Return: NodeDecl
+    Return: EntityDecl
+  Return: PackageV4
+Return: Program
+ PROGRAM || = |Program
+ PROGRAM || = | Package iterate
+ PROGRAM || = |  NodeDecl
+ PROGRAM || = |   NodeHeader iterate
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident IN1
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident IN2
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident OUT
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_map1
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_map2
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_red1
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_fill1
+ PROGRAM || = |       Ident out_fill2
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_mapred1
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident out_mapred2
+ PROGRAM || = |       Ident out_mapred3
+ PROGRAM || = |      TypeArray ^
+ PROGRAM || = |       TypeIdent int
+ PROGRAM || = |        Identifier int
+ PROGRAM || = |       ValInt 10
+ PROGRAM || = |   FNBody
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident bidon
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |    EquationList
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier out_map1
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier out_map2
+ PROGRAM || = |      Call
+ PROGRAM || = |       MapOp map
+ PROGRAM || = |        Identifier mapped
+ PROGRAM || = |        ValInt 10
+ PROGRAM || = |       ExpressionList
+ PROGRAM || = |        Identifier IN1
+ PROGRAM || = |        Identifier IN2
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier out_red1
+ PROGRAM || = |      Call
+ PROGRAM || = |       RedOp red
+ PROGRAM || = |        Identifier redduced
+ PROGRAM || = |        ValInt 10
+ PROGRAM || = |       ExpressionList
+ PROGRAM || = |        ValInt 0
+ PROGRAM || = |        Identifier IN1
+ PROGRAM || = |        Identifier IN2
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier bidon
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier out_fill1
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier out_fill2
+ PROGRAM || = |      Call
+ PROGRAM || = |       FillOp fill
+ PROGRAM || = |        Identifier filled
+ PROGRAM || = |        ValInt 10
+ PROGRAM || = |       ValInt 0
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier out_mapred1
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier out_mapred2
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier out_mapred3
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier OUT
+ PROGRAM || = |      Call
+ PROGRAM || = |       MapRedOp map_red
+ PROGRAM || = |        Identifier map_redduced
+ PROGRAM || = |        ValInt 10
+ PROGRAM || = |       ExpressionList
+ PROGRAM || = |        ValInt 0
+ PROGRAM || = |        Identifier IN1
+ PROGRAM || = |        Identifier IN2
+ PROGRAM || = |  NodeDecl
+ PROGRAM || = |   NodeHeader mapped
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident elt_in1
+ PROGRAM || = |       Ident elt_in2
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident elt_out1
+ PROGRAM || = |       Ident elt_out2
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |   FNBody
+ PROGRAM || = |    EquationList
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier elt_out1
+ PROGRAM || = |      Identifier elt_in1
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier elt_out2
+ PROGRAM || = |      Identifier elt_in2
+ PROGRAM || = |  NodeDecl
+ PROGRAM || = |   NodeHeader redduced
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident accu_in
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident elt_in1
+ PROGRAM || = |       Ident elt_in2
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident accu_out
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |   FNBody
+ PROGRAM || = |    EquationList
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier accu_out
+ PROGRAM || = |      Plus +
+ PROGRAM || = |       Plus +
+ PROGRAM || = |        Identifier accu_in
+ PROGRAM || = |        Identifier elt_in1
+ PROGRAM || = |       Identifier elt_in2
+ PROGRAM || = |  NodeDecl
+ PROGRAM || = |   NodeHeader filled
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident accu_in
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident accu_out
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident elt_out1
+ PROGRAM || = |       Ident elt_out2
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |   FNBody
+ PROGRAM || = |    EquationList
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier accu_out
+ PROGRAM || = |      Plus +
+ PROGRAM || = |       Identifier accu_in
+ PROGRAM || = |       ValInt 1
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier elt_out1
+ PROGRAM || = |      Identifier accu_in
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier elt_out2
+ PROGRAM || = |      Mult *
+ PROGRAM || = |       Identifier accu_in
+ PROGRAM || = |       ValInt 2
+ PROGRAM || = |  NodeDecl
+ PROGRAM || = |   NodeHeader map_redduced
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident accu_in
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident elt_in1
+ PROGRAM || = |       Ident elt_in2
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |    FNParam
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident accu_out
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |     VarDecl
+ PROGRAM || = |      IdentList
+ PROGRAM || = |       Ident elt_out1
+ PROGRAM || = |       Ident elt_out2
+ PROGRAM || = |       Ident elt_out3
+ PROGRAM || = |      TypeIdent int
+ PROGRAM || = |       Identifier int
+ PROGRAM || = |   FNBody
+ PROGRAM || = |    EquationList
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier accu_out
+ PROGRAM || = |      Plus +
+ PROGRAM || = |       Identifier accu_in
+ PROGRAM || = |       ValInt 1
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier elt_out1
+ PROGRAM || = |      Identifier elt_in1
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier elt_out2
+ PROGRAM || = |      Identifier elt_in2
+ PROGRAM || = |     Equation =
+ PROGRAM || = |      LeftList
+ PROGRAM || = |       Left
+ PROGRAM || = |        Identifier elt_out3
+ PROGRAM || = |      Plus +
+ PROGRAM || = |       Identifier elt_in1
+ PROGRAM || = |       Identifier elt_in2
+ PROFILE NON DEFINI
+ PROFILE NON DEFINI
+ PROFILE NON DEFINI
+ PROFILE NON DEFINI
+-- lustreV6 compiler version 1.0 --
diff --git a/src/test/should_work/fab_test/lecteur.lus b/src/test/should_work/fab_test/lecteur.lus
new file mode 100644
index 00000000..d2c86b1b
--- /dev/null
+++ b/src/test/should_work/fab_test/lecteur.lus
@@ -0,0 +1,32 @@
+node Environnement(diff: int; plus,moins: bool) returns (ok: bool);
+let
+  ok = (-4 <= diff and diff <= 4) and 
+     (if (true -> pre plus) then diff >= 1 else true) and
+     (if (false -> pre moins) then diff <= -1 else true);
+tel
+
+node Controleur(diff: int) returns (vitesse: int; plus,moins: bool);
+let
+  vitesse = 0 -> pre(vitesse)+diff;
+  plus = vitesse <= 9;
+  moins = vitesse >= 11;
+tel
+
+node Propriete(vitesse: int) returns (ok: bool);
+var cpt: int;
+    acceptable: bool;
+let
+  acceptable = 8 <= vitesse and vitesse <= 12;
+  cpt = 0 -> if acceptable then 0 else pre(cpt)+1;
+  ok = true -> (pre cpt<15);
+tel
+
+node lecteur(diff:int) returns (ok: bool);
+var vitesse: int; 
+    plus,moins,realiste: bool;
+let
+  (vitesse,plus,moins) = Controleur(diff);
+  realiste =  Environnement(diff,plus,moins);
+  assert(realiste);
+  ok = Propriete(vitesse);
+tel
diff --git a/src/test/should_work/fab_test/lucky.lus b/src/test/should_work/fab_test/lucky.lus
new file mode 100644
index 00000000..20787d87
--- /dev/null
+++ b/src/test/should_work/fab_test/lucky.lus
@@ -0,0 +1,45 @@
+node lucky (signal : int; action : bool) returns (alarm : bool);
+var
+    active : bool;
+    begin,en : bool;
+let
+    active = (signal > 20) -> if pre(active) then (signal > 10) else  (signal > 20);
+    begin = active and (false -> not pre(active));
+    en = (not active) and (false -> pre active);
+    alarm = (not once_from_to(action,begin,en)) or (stable(active) > 10);
+tel
+
+-- " o compte le nombre des derniers pas consécutifs 
+--   pendant lesquels i n'a pas changé de valeur "
+node stable(i : bool) returns (o : int);
+let
+    o = if (true -> (i = pre(i))) then (1 + (0 -> pre(o))) else 0;
+tel
+
+-- " X vaut vrai ssi C a valu vrai au moins une fois 
+--   entre A et B "
+node once_from_to (C,A,B: bool) returns (X: bool);
+let
+        X = implies(B, false -> pre(once_since(C,A)));
+tel
+
+-- " X vaut vrai ssi C a valu vrai depuis A "
+node once_since (C,A: bool) returns (X: bool);
+let
+        X = if A then C else 
+            if after(A) then C or (false -> pre(X))
+            else false;
+tel
+
+-- " XimpliesY est vrai ssi X=>Y "
+node implies(X,Y : bool) returns (XimpliesY : bool);
+let
+        XimpliesY = (not X) or Y;
+tel
+
+-- " afterX vaut vrai ssi X a valu vrai dans le passe "
+node after (X: bool) returns (afterX: bool);
+let
+        afterX = false -> pre(X or afterX);
+tel
+
diff --git a/src/test/should_work/fab_test/morel.lus b/src/test/should_work/fab_test/morel.lus
new file mode 100644
index 00000000..a9408af7
--- /dev/null
+++ b/src/test/should_work/fab_test/morel.lus
@@ -0,0 +1,30 @@
+
+type 
+	arrayb = bool^3 ;
+	arrayi = int^2^3 ;
+
+node morel(b : bool; i : int) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+let
+	b1, b2, b3, i1, i2, i3 = tab(b,i);
+tel
+
+node tab(b : bool; i : int) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+var
+	tabb : arrayb;
+	tabi : arrayi;
+let
+	b1, b2, b3 = (tabb[0], tabb[1], tabb[2]) ;
+	i1, i2, i3 = (tabi[0][0]+tabi[0][1], tabi[1][0]+tabi[1][1], tabi[2][0]+tabi[2][1]);
+
+	tabb[0] = b;
+	tabb[1..2] = [true, false] ;
+
+	tabi[2] = mcmorel(i) ;
+	tabi[0..1] = [ [10,100], [1000,10000] ] ;
+tel
+
+node mcmorel(i:int) returns (t:int^2);
+let
+	t = [i,i] -> [pre(t[0])+1,pre(t[1])+2] ;
+tel
+
diff --git a/src/test/should_work/fab_test/morel2.lus b/src/test/should_work/fab_test/morel2.lus
new file mode 100644
index 00000000..b065523d
--- /dev/null
+++ b/src/test/should_work/fab_test/morel2.lus
@@ -0,0 +1,36 @@
+
+type 
+	arrayb = bool^3 ;
+	arrayi = int^2^3 ;
+
+	a2 = int^2 ;
+	a32 = a2^3 ;
+
+node morel2(b : bool; i : int) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+var
+	tabb : arrayb;
+	tabi : arrayi;
+
+	toto : a32 ;
+let
+	b1, b2, b3 = (tabb[0], tabb[1], tabb[2] );
+	i1, i2, i3 = (tabi[0][0]+tabi[0][1], tabi[1][0]+tabi[1][1], tabi[2][0]+tabi[2][1]);
+
+	tabb[0] = b;
+	tabb[1..2] = [true, false] ;
+
+	--tabi[2] = mcmorel(i) ;
+	--tabi[0..1] = [ [10,100], [1000,10000] ] ;
+
+	toto[2] = mcmorel(i) ;
+	toto[0..1] = [ [10,100], [1000,10000] ] ;
+
+	tabi = toto;
+
+tel
+
+node mcmorel(i:int) returns (t:int^2);
+let
+	t = [i,i] -> [pre(t[0])+1,pre(t[1])+2] ;
+tel
+
diff --git a/src/test/should_work/fab_test/morel3.lus b/src/test/should_work/fab_test/morel3.lus
new file mode 100644
index 00000000..10e9d4a4
--- /dev/null
+++ b/src/test/should_work/fab_test/morel3.lus
@@ -0,0 +1,30 @@
+
+type 
+	arrayb = bool^3 ;
+	arrayi = int^2^3 ;
+
+node morel3(b : bool; i : int) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+let
+	b1, b2, b3, i1, i2, i3 = tab(b,i);
+tel
+
+node tab(b : bool; i : int) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+var
+	tabb : arrayb;
+	tabi : arrayi;
+let
+	b1, b2, b3 = (tabb[0], tabb[1], tabb[2]) ;
+	i1, i2, i3 = (tabi[0][0]+tabi[0][1], tabi[1][0]+tabi[1][1], tabi[2][0]+tabi[2][1]);
+
+	tabb[0] = b;
+	tabb[1..2] = [true, false] ;
+
+	tabi[2] = mcmorel(i) ;
+	tabi[0..1] = [ [10,100], [1000,10000] ] ;
+tel
+
+node mcmorel(i:int) returns (t:int^2);
+let
+	t = [i,i] -> [1,pre(t[1])+2] ;
+tel
+
diff --git a/src/test/should_work/fab_test/morel4.lus b/src/test/should_work/fab_test/morel4.lus
new file mode 100644
index 00000000..943fafd0
--- /dev/null
+++ b/src/test/should_work/fab_test/morel4.lus
@@ -0,0 +1,38 @@
+
+type 
+	arrayb = bool^3 ;
+	arrayi = int^2^3 ;
+
+	tube = {in:int; out:int} ;
+	toto = {titi:tube; tutu:bool} ;
+
+node morel4(b : bool; i : int) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+let
+	b1, b2, b3, i1, i2, i3 = tab(b,i);
+tel
+
+node tab(b : bool; i : int) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+var
+	tabb : arrayb;
+	tabi : arrayi;
+let
+	b1, b2, b3 = (tabb[0], tabb[1], tabb[2] );
+	i1, i2, i3 = (tabi[0][0]+tabi[0][1], tabi[1][0]+tabi[1][1], tabi[2][0]+tabi[2][1]);
+
+	tabb[0] = b;
+	tabb[1..2] = [true, false] ;
+
+	tabi[2] = mcmorel(i) ;
+	tabi[0..1] = [ [10,100], [1000,10000] ] ;
+tel
+
+node mcmorel(i:int) returns (t:int^2);
+var
+	yo : toto;
+let
+	yo.titi = {in=i, out=i+1} ;
+	yo.tutu = true ;
+	t = [yo.titi.in, yo.titi.out] -> [pre(t[0])+1,pre(t[1])] ;
+	--t = [ 2, 3 ] ;
+tel
+
diff --git a/src/test/should_work/fab_test/morel5.lus b/src/test/should_work/fab_test/morel5.lus
new file mode 100644
index 00000000..0b76a785
--- /dev/null
+++ b/src/test/should_work/fab_test/morel5.lus
@@ -0,0 +1,36 @@
+
+type 
+	arrayb = bool^3 ;
+	arrayi = int^2^3 ;
+
+	tube = {in:int; out:int} ;
+	toto = {titi:tube; tutu:bool} ;
+
+node morel5(t : toto; b : arrayb; i : arrayi) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+let
+	b1, b2, b3, i1, i2, i3 = tab(t,b,i);
+tel
+
+node tab(yo : toto; tabb : arrayb; tabi : arrayi) returns (b1, b2, b3 : bool; i1, i2, i3 : int);
+let
+	b1, b2, b3 = (tabb[0], tabb[1], tabb[2] or yo.tutu );
+	i1, i2, i3 = (tabi[0][0]+tabi[0][1], tabi[1][0]+tabi[1][1] + yo.titi.in , tabi[2][0]+tabi[2][1] + yo.titi.out );
+
+	--tabb[0] = b;
+	---tabb[1..2] = [true, false] ;
+
+	--(tabi[2], tabi[0..1]) = mcmorel(i) ;
+	--tabi[0..1] = [ [10,100], [1000,10000] ] ;
+tel
+
+node mcmorel(i:int) returns (t:int^2; u:int^2^2);
+var
+	yo : toto;
+let
+	yo.titi = {in=i; out=i+1} ;
+	yo.tutu = true ;
+	t = [yo.titi.in, yo.titi.out] -> [pre(t[0])+1,pre(t[1])] ;
+	u = [ [10,100], [1000,10000] ] ;
+	--t = [ 2, 3 ] ;
+tel
+
diff --git a/src/test/should_work/fab_test/noAlarm.lus b/src/test/should_work/fab_test/noAlarm.lus
new file mode 100644
index 00000000..5cfa2443
--- /dev/null
+++ b/src/test/should_work/fab_test/noAlarm.lus
@@ -0,0 +1,6 @@
+
+node noAlarm(alarm : bool) returns (ok : bool);
+let
+	ok = not alarm;
+tel
+
diff --git a/src/test/should_work/fab_test/notTwo.lus b/src/test/should_work/fab_test/notTwo.lus
new file mode 100644
index 00000000..307e37dc
--- /dev/null
+++ b/src/test/should_work/fab_test/notTwo.lus
@@ -0,0 +1,6 @@
+
+node notTwo(a, b : bool) returns (o : bool);
+let
+	o = not (a and b) ;
+tel
+
diff --git a/src/test/should_work/fab_test/onlyroll.lus b/src/test/should_work/fab_test/onlyroll.lus
new file mode 100644
index 00000000..4998a330
--- /dev/null
+++ b/src/test/should_work/fab_test/onlyroll.lus
@@ -0,0 +1,587 @@
+-- =============================================================================================
+-- Plus_Memo_Errs
+-- =============================================================================================
+
+const 
+	  BID_LAST    = 2.2 ;
+	  BID_VAL     = 3.3 ;	 -- foo value, easily observable, for the
+						     -- if branches where we should'nt go !
+
+      DELTA_ROLL  = 14.9 ;   -- cf table 1 page 12. deg/sec
+      DELTA_PITCH = 3.0 ;
+      DELTA_YAW   = 2.73 ;
+
+      XFAIL_SAFE_ROLL_VALUE  =  1.1 ;  -- should be 0, but 1 is easier to observe
+      FAIL_SAFE_ROLL_VALUE  =  1.0 ;  -- should be 0, but 1 is easier to observe
+      FAIL_SAFE_PITCH_VALUE =  4.0 ; 
+      FAIL_SAFE_YAW_VALUE   =  4.0 ;
+	  OneSecond             = 10  ; -- number of cycles.
+
+	  CROSS_CH_TOL_ROLL     = 51.0 ;
+	  CROSS_CH_TOL_PITCH    = 10.1 ;
+	  CROSS_CH_TOL_YAW      = 10.0 ;
+
+
+	  NRmaxR                =  25.3 ;
+	  NRminR                = -25.3 ;       -- NominalRange for roll
+
+	  NRmaxP                =   5.1 ;
+	  NRminP                = - 5.1 ;       -- NominalRange for pitch
+
+	  NRmaxY                =   5.0 ;
+	  NRminY                = - 5.0 ;       -- NominalRange for yaw
+
+	  HORmaxR               =   285.0 ;
+	  HORminR               = - 285.0 ;     -- Hard Over Range for roll
+
+	  HORmaxP               =   57.0 ;
+	  HORminP               = - 57.0 ;      -- Hard Over Range for pitch
+
+	  HORmaxY               =   57.0 ;
+	  HORminY               = - 57.0 ;	    -- Hard Over Range for yaw
+
+
+	  TIME5                 = 4      ;      -- specified in point 5, page 4 (value ?)
+
+	  SAFE_COUNTER_TIME     = 3      ; 
+	  TIME_ROLL             = 3      ;
+	  TIME_CROSS_ROLL       = 3      ; 
+
+
+
+
+---------------------------------------------------
+-- Some comparisons needed by FailDetect (for roll)
+---------------------------------------------------
+
+node InNominalRange (r : real) returns (i : bool) ;
+let
+	i = (r < NRmaxR) and (r > NRminR) ; 
+tel
+
+node InHardoverRange (r : real) returns (i : bool) ;
+let
+	i = (r > HORmaxR) or (r < HORminR) ; 
+tel
+
+
+
+
+
+---------------------------------------------------------------------------------------
+-- A main program that does the job, but only for one channel (roll or yaw, pitch being
+-- a little special).
+---------------------------------------------------------------------------------------
+
+node onlyroll (
+     xa1, xb1, xa2, xb2, xa3, xb3, xa4, xb4 : real ;  -- transmitted measures
+     ongroundreset, inairreset : bool ;  -- resets
+     disc1, disc2, disc3, disc4 : bool ; -- the wire is disconnected
+     choff1, choff2, choff3, choff4 : bool ;  -- channel offline
+) returns (
+     x : real ; -- the secure value
+     debug_localfailure1, debug_localfailure2, debug_localfailure3, debug_localfailure4 : bool ;
+     debug_cross_failure1, debug_cross_failure2,debug_cross_failure3,debug_cross_failure4 : bool ;
+     debug_ch_failed1, debug_ch_failed2,debug_ch_failed3,debug_ch_failed4 : bool ;
+     debug_st1, debug_st2, debug_st3, debug_st4 : int ;  
+)
+var
+	x1, x2, x3, x4 : real ; -- the values computed by the four channels
+	f1, f2, f3, f4 : bool  ; -- the failure statuses as seen by the four channels
+	ask1, ask2, ask3, ask4 : bool ; -- requests to become reset inhibited
+	allowed1, allowed2, allowed3, allowed4 : bool ; -- answers of the global allocator
+
+let
+    debug_ch_failed1 = f1 ;
+    debug_ch_failed2 = f2 ;
+    debug_ch_failed3 = f3 ;
+    debug_ch_failed4 = f4 ;
+
+
+    (x1, f1, ask1, debug_localfailure1, debug_cross_failure1, debug_st1) = Channel (
+			    ongroundreset, inairreset,
+		            choff1,
+		            xa1, xb1,
+		            disc1,
+		            0.0 -> pre (x2), 0.0 -> pre(x3), 0.0 -> pre(x4), 
+			    false -> pre(f2),false -> pre(f3),false -> pre(f4),
+			    allowed1) ;
+
+    (x2, f2, ask2, debug_localfailure2, debug_cross_failure2, debug_st2) = Channel (
+			    ongroundreset, inairreset,
+		            choff2,
+		            xa2, xb2,
+		            disc2,
+		            0.0 -> pre (x1), 0.0 -> pre(x3), 0.0 -> pre(x4), 
+			    false -> pre(f1), false -> pre(f3), false -> pre(f4),
+			    allowed2) ;
+
+    (x3, f3, ask3, debug_localfailure3, debug_cross_failure3, debug_st3) = Channel (
+			    ongroundreset, inairreset,
+		            choff3,
+		            xa3, xb3,
+		            disc3,
+		            0.0 -> pre (x1), 0.0 -> pre(x2), 0.0 -> pre(x4), 
+                            false -> pre(f1), false -> pre(f2), false -> pre(f4),
+			    allowed3) ;
+
+    (x4, f4, ask4, debug_localfailure4, debug_cross_failure4, debug_st4) = Channel (
+			    ongroundreset, inairreset,
+		            choff4,
+		            xa4, xb4,
+		            disc4,
+		            0.0 -> pre (x1), 0.0 -> pre(x2), 0.0 -> pre(x3), 
+                            false -> pre(f1), false -> pre(f2), false -> pre(f3),
+			    allowed4) ;
+
+    (allowed1, allowed2, allowed3, allowed4) =
+	pre Allocator (ask1, ask2, ask3, ask4, ongroundreset) ;
+
+    x = Calculate (x1, x2, x3, x4, f1, f2, f3, f4) ;
+tel
+
+
+---------------------------------------------------------------------------------------------
+---------------------------------------------------------------------------------------------
+node Channel (
+	ongroundreset, inairreset : bool ; -- the global inputs 
+	choffi : bool ; -- channel offline 
+	xai, xbi : real ;  -- two inputs
+	disci : bool ; -- inputs disconnected
+	pxother1, pxother2, pxother3 :  real ; -- values computed by the other channels (pre)
+	pfother1, pfother2, pfother3 : bool ; -- failure statuses of the other channels (pre)
+	allowedi : bool ; -- allowed to become reset inhibited
+)
+returns (
+	xi : real ; -- the value computed by this channel
+	fi : bool ; -- the failure status of this channel
+	aski : bool ; -- a request to become reset inhibited
+	debug_localfailure : bool ; -- for observation purposes
+	debug_cross_failure : bool ; -- for observation purposes
+	debug_st : int ; -- for observation purposes
+)
+var
+	local_failure : bool ;
+let
+	(xi, local_failure)  = Monitor (xai, xbi, disci) ;
+
+	(fi, debug_cross_failure, debug_st, aski) = FailDetect (
+		local_failure, xi, 
+		ongroundreset, inairreset, 
+		choffi, 
+		pxother1, pxother2, pxother3,
+		pfother1, pfother2, pfother3,
+      allowedi) ;
+
+	debug_localfailure = local_failure ;
+	
+tel
+
+
+---------------------------------------------------------------------------------------------
+-- Monitor : a part of the channel, that looks for local failures, and chooses one
+-- of the two values, to be transmitted to other channels.
+---------------------------------------------------------------------------------------------
+node Monitor (
+	xa, xb : real ;  -- two values 
+	disc : bool ;    -- the wires are disconnected
+)
+returns (
+	local_value  : real ; -- the value seen by this channel 
+	inline_monitor_failed : bool ; -- detection of a local fault
+) 
+let    
+	-- locally detected failures :
+	-- the two values on the same channel differ two much 
+	-- for a two long time, or the wires are disconnected
+
+	inline_monitor_failed  =
+		maintain (TIME_ROLL,
+			abs (xa - xb) > DELTA_ROLL)
+			or disc ;
+
+	-- and transmit the first value (how to choose ?)
+	local_value = xa ;
+tel
+
+
+---------------------------------------------------------------------------------------------
+-- The main fail detection, with states and reactions to the resets.
+-- There are 3 states :
+--          1)   OK and unlatched faults
+--	    2)   Latched faults, resest allowed
+--	    3)   Latched faults, reset inhibited
+-- The transitions : 
+--          
+-- The way failure is computed (the output) :
+--          in state 1, failure is computed at each step, depending on the non-latched failure
+--	                causes
+--	    in states 2 and 3 : failure = true
+---------------------------------------------------------------------------------------------
+node FailDetect (
+	local_failure : bool ; 
+	xi : real ;
+	ongroundreset, inairreset : bool ;
+	choffi : bool ;
+	pxother1, pxother2, pxother3 : real ; -- other values (pre)
+	pfother1, pfother2, pfother3 : bool ; -- other failures (pre)
+   a: bool ; -- permission to become reset inhibited
+)
+returns (
+	failure : bool ; -- failure detected by this channel
+	debug_cross_failure : bool ; -- for observation
+	debug_st : int ; -- for observation (the state)
+   r : bool ; -- request to become reset inhibited
+)
+var
+	cross_failure : bool ; 
+	ps, state : int ; -- only 1, 2, 3 are relevant
+	from1to2, from1to3, from2to3, from2to1, from3to1 : bool ;
+	NLfaults : bool ;
+	will_latch, reset, foreign_failure : bool ;
+let
+	-- the state -------------------------------------------------------
+	debug_st  = state ;
+	ps        = 1 -> pre(state) ;     -- FABIEN RAJOUTE " 1 -> "
+	state     = 1 ->
+		    if ps=1 then
+	 		    if pre(reset) then 1	  -- reset has priority
+			    else if pre(from1to2) then 2 
+			    else if pre(from1to3) then 3
+			    else 1 
+		    else if ps=2 then 
+			    if pre(from2to1) then 1       -- reset has priority
+			    else if pre(from2to3) then 3
+			    else 2 
+		    else -- ps=3
+			    if pre(from3to1) then 1       -- reset has priority
+			    else 3 ;
+
+
+	-- The output ------------------------------------------------------
+	failure = (state = 2) or (state = 3) or (state = 1 and NLfaults) ;
+
+	-- previous version :
+	-- failure = local_failure or cross_failure or choffi ;
+
+	-- All the transitions ---------------------------------------------
+
+	reset = ongroundreset or (inairreset and not cross_failure) ;
+	foreign_failure = pfother1 or pfother2 or pfother3 ;
+
+	-- non-latched failures
+	NLfaults = choffi or local_failure ; 
+
+	-- latched faults of the first kind (and not reset). go to state 2 only, because the value
+	-- is not in the nominal range, so it might be a "small" error
+
+	from1to2 = will_latch and not InNominalRange (xi) ;
+	will_latch = cross_failure ;
+
+	-- latched faults of the second kind (and not reset). go immediately to state 3 where
+	-- reset is inhibited, because the value is in its nominal range, so this is a real
+	-- error.
+
+	from1to3 = a and will_latch and  InNominalRange (xi) ;
+
+	-- reason for a latched fault to become reset inhibited : will_latch followed immediately
+	-- by a foreign failure, or local failure occurs
+	from2to3 = a and (pre(will_latch) and  foreign_failure  or local_failure) ;
+
+	-- only on ground reset can do that
+	from3to1 = ongroundreset ;
+
+	-- onground reset can do that, and also inair reset if the values are ok
+	from2to1 = reset ;
+	
+   -- request to beconme reset inhibited
+    r = false ->
+          -- (pre(state) = 1 and cross_failure and InNominalRange (xi))
+		  (pre(state) = 1 and cross_failure)
+           or (pre(state) = 2 and
+               (pre(cross_failure) and  foreign_failure) or local_failure);
+
+
+	-- Cross channel comparisons ---------------------------------------------------
+	-- for cross failure, the value xi should be compared only to the foreign values
+	-- that are ok. 
+	-- An error is reported when values differ two much for a too long time
+
+	cross_failure = values_nok (
+		pfother1, pfother2, pfother3,
+		xi, pxother1, pxother2, pxother3) ;
+
+	-- debug -----------------------------------------------------------------------
+	debug_cross_failure = cross_failure ;
+tel
+
+
+
+---------------------------------------------------------------------------------------------
+-- Cross-channel comparisons. The local value xi is compared to those among the foreign
+-- ones that are not declared failed (that's why we need the fail statuses of the three
+-- foreign channels).
+-- Be careful with the position of the MAINTAIN....
+-- Well, we don't really know whether the failure is related to the SAME error being maintained
+-- during TIME_CROSS_ROLL steps, or if it's simply defined by : there has been an error
+-- for at least TIME_CROSS_ROLL steps (but not necessarily the same).
+-- the program below takes the second option.
+---------------------------------------------------------------------------------------------
+
+node values_nok (
+	pfother1, pfother2, pfother3 : bool ; -- foreign values status
+	xi : real ; -- local value 
+	pxother1, pxother2, pxother3 : real ; -- foreign values 
+) 
+returns ( 
+	r : bool -- there is a cross channel error
+)
+var
+	one, two, three : bool ; -- comparisons of xi with the three foreign values
+let
+	one   = abs (xi - pxother1) > CROSS_CH_TOL_ROLL ;
+	two   = abs (xi - pxother2) > CROSS_CH_TOL_ROLL ;
+	three = abs (xi - pxother3) > CROSS_CH_TOL_ROLL ;
+	
+
+	r     =  maintain(TIME_CROSS_ROLL, 
+			  if pfother1 then  -- don't take this one into account
+				if pfother2 then -- the same
+				      if pfother3 then 
+					  false 
+				      else
+					  three 
+			        else 
+ 				      if pfother3 then 
+					  two
+				      else
+					 (two and three)
+			  else if pfother2 then
+				if pfother3 then one else (one and three)
+			  else if pfother3 then
+				(one and two)
+			  else
+				(one and two and three)) ;
+
+
+tel 
+
+
+
+
+
+---------------------------------------------------------------------------------------------
+-- Allocator, for allowing the channels to become reset inhibited
+---------------------------------------------------------------------------------------------
+node Allocator(r1,r2,r3,r4,reset: bool)
+returns (a1,a2,a3,a4: bool);
+-- receives requests from the 4 units
+-- delivers autorizations
+-- ensures that at most 2 authorized since the last reset
+var nb_aut, already: int;
+let
+   already = if (true -> reset) then 0 else pre(nb_aut);
+   a1 = r1 and already <= 1;
+   a2 = r2 and 
+        (  (not r1 and already <= 1)
+        or (r1 and already = 0) 
+        );
+   a3 = r3 and
+        (  (not r1 and not r2  and already <= 1)
+        or (#(r1,r2) and already = 0) 
+        );
+   a4 = r4 and
+        (  (not r1 and not r2 and not r3 and already <= 1)
+        or (#(r1,r2,r3) and already = 0) 
+        );
+   nb_aut = if (true -> reset) then 0
+            else pre(nb_aut) +
+                 if a1 then 1 else 0 +
+                 if a2 then 1 else 0 +
+                 if a3 then 1 else 0 +
+                 if a4 then 1 else 0 ;
+tel
+
+
+---------------------------------------------------------------------------------------------
+-- the voter
+---------------------------------------------------------------------------------------------
+node Calculate (
+	x1, x2, x3, x4 : real ;  -- four values given by the channels
+	f1, f2, f3, f4 : bool ; -- failure statuses seen by the four channels 
+) 
+returns  (
+	x : real 
+)
+var 
+	zero_roll, one_roll, two_roll, three_roll : bool ; -- numbers of failures 
+	cpt_roll : int ; -- a counter 
+let
+	cpt_roll = 0 -> if three_roll then SAFE_COUNTER_TIME
+	else if pre (cpt_roll)>0 then pre(cpt_roll) - 1
+	else 0 ;
+
+
+	zero_roll  = noneof (f1, f2, f3, f4) ;
+	one_roll   = oneoffour (f1, f2, f3, f4) ;
+	two_roll   = twooffour (f1, f2, f3, f4) ;
+	three_roll = threeoffour (f1, f2, f3, f4) ;
+
+	x = if (zero_roll and cpt_roll = 0 ) then
+		OlympicAverage (x1, x2, x3, x4)
+	else if (one_roll and cpt_roll = 0 ) then
+		Median (x1, x2, x3, x4, f1, f2, f3, f4 )
+	else if (two_roll and cpt_roll = 0 ) then
+		Average (x1, x2, x3, x4, f1, f2, f3, f4 )
+	else FAIL_SAFE_ROLL_VALUE ;
+
+tel
+
+
+
+node noneof (f1, f2, f3, f4 : bool) returns (r : bool) 
+let
+	 r = not f1 and not f2 and not f3 and not f4 ;
+tel 
+
+node oneoffour (f1, f2, f3, f4 : bool) returns (r : bool) 
+let
+	r = f1 and not f2 and not f3 and not f4 or
+	    f2 and not f1 and not f3 and not f4 or
+	    f3 and not f1 and not f2 and not f4 or
+	    f4 and not f1 and not f2 and not f3 ;
+tel 
+
+node twooffour (f1, f2, f3, f4 : bool) returns (r : bool) 
+let
+	r = f1 and (f2 and not f3 and not f4  or
+		    f3 and not f2 and not f4  or
+	 	    f4 and not f2 and not f3)  or
+            f2 and (f1 and not f3 and not f4  or
+		    f3 and not f1 and not f4  or
+	 	    f4 and not f1 and not f3)  or
+            f3 and (f2 and not f1 and not f4  or
+		    f1 and not f2 and not f4  or
+	 	    f4 and not f2 and not f1)  or
+	    f4 and (f2 and not f3 and not f1  or
+		    f3 and not f2 and not f1  or
+	 	    f1 and not f2 and not f3) ; 
+tel
+
+node threeoffour (f1, f2, f3, f4 : bool) returns (r : bool) 
+let
+	r = oneoffour (not f1, not f2, not f3, not f4) ;
+tel 
+
+
+node Median (x1, x2, x3, x4 : real ; f1, f2, f3, f4 : bool) returns (r : real)
+-- one of the four f is true exactly
+let
+	r = if f1 then MedianValue3 (x2, x3, x4)
+	    else if f2 then MedianValue3 (x1, x3, x4)
+	    else if f3 then MedianValue3 (x1, x2, x4)
+	    else            MedianValue3 (x1, x2, x3) ;
+tel
+
+
+node Average (x1, x2, x3, x4 : real ; f1, f2, f3, f4 : bool) returns (r : real)
+-- two of the f are true, exactly
+let
+	r = if f1 then 
+	      if f2 then Average2 (x3, x4) 
+	      else if f3 then Average2 (x2, x4) 
+	      else Average2 (x3, x2)
+	else if f2 then 
+	      if f1 then Average2 (x3, x4) 
+	      else if f3 then Average2 (x1, x4) 
+	      else Average2 (x3, x1) 
+	else if f3 then 
+	      if f2 then Average2 (x1, x4) 
+	      else if f4 then Average2 (x2, x1) 
+	      else Average2 (x4, x2) 
+	else 
+	      if f2 then Average2 (x3, x1) 
+	      else if f3 then Average2 (x2, x1) 
+	      else Average2 (x3, x2) ;
+tel
+
+
+-- ==========================================================================
+-- Some arithmetic functions 
+-- ==========================================================================
+
+node abs (v : real) returns (a : real) ;
+let
+	a = if v >= 0.0 then v else -v ;
+tel
+
+
+
+
+node OlympicAverage (one, two, three, four : real) returns (m : real) ;
+let
+     m = (one + two + three + four 
+         - max4 (one, two, three, four)
+         - min4 (one, two, three, four)) / 2.0 ;
+tel
+
+node MedianValue3 (a, b, c : real) returns (z : real); 
+let
+	z = a + b + c - min2 (a, min2(b,c)) - max2 (a, max2(b,c)) ;
+tel
+
+node Average2(a, b: real) returns (z : real); 
+let 
+	z = (a+b)/2.0 ; 
+tel
+
+
+
+node max4 (one, two, three, four : real) returns (m : real) ;
+let
+	m = max2 (max2 (one, two), max2 (three, four)) ;
+tel
+
+node max2 (one, two  : real) returns (m : real) ;
+let
+	m = if one > two then one else two ;
+tel
+
+node min4 (one, two, three, four : real) returns (m : real) ;
+let
+	m = min2 (min2 (one, two), min2 (three, four)) ;
+tel
+
+node min2 (one, two  : real) returns (m : real) ;
+let
+	m = if one < two then one else two ;
+tel
+
+
+-- ==========================================================================
+-- Some time functions 
+-- ==========================================================================
+
+
+node maintain (n : int ; val : bool) returns (m : bool) ;
+var cpt : int ;
+let
+	cpt = (if val then 1 else 0) ->
+	       (if val then pre(cpt) + 1 else 0) ;
+
+	m   = (cpt >= n) ;
+tel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/should_work/fab_test/onlyroll2.lus b/src/test/should_work/fab_test/onlyroll2.lus
new file mode 100644
index 00000000..cac7294a
--- /dev/null
+++ b/src/test/should_work/fab_test/onlyroll2.lus
@@ -0,0 +1,587 @@
+-- =============================================================================================
+-- Plus_Memo_Errs
+-- =============================================================================================
+
+const 
+	  BID_LAST    = 2.2 ;
+	  BID_VAL     = 3.3 ;	 -- foo value, easily observable, for the
+						     -- if branches where we should'nt go !
+
+      DELTA_ROLL  = 14.9 ;   -- cf table 1 page 12. deg/sec
+      DELTA_PITCH = 3.0 ;
+      DELTA_YAW   = 2.73 ;
+
+      XFAIL_SAFE_ROLL_VALUE  =  1.1 ;  -- should be 0, but 1 is easier to observe
+      FAIL_SAFE_ROLL_VALUE  =  1.0 ;  -- should be 0, but 1 is easier to observe
+      FAIL_SAFE_PITCH_VALUE =  4.0 ; 
+      FAIL_SAFE_YAW_VALUE   =  4.0 ;
+	  OneSecond             = 10  ; -- number of cycles.
+
+	  CROSS_CH_TOL_ROLL     = 51.0 ;
+	  CROSS_CH_TOL_PITCH    = 10.1 ;
+	  CROSS_CH_TOL_YAW      = 10.0 ;
+
+
+	  NRmaxR                =  25.3 ;
+	  NRminR                = -25.3 ;       -- NominalRange for roll
+
+	  NRmaxP                =   5.1 ;
+	  NRminP                = - 5.1 ;       -- NominalRange for pitch
+
+	  NRmaxY                =   5.0 ;
+	  NRminY                = - 5.0 ;       -- NominalRange for yaw
+
+	  HORmaxR               =   285.0 ;
+	  HORminR               = - 285.0 ;     -- Hard Over Range for roll
+
+	  HORmaxP               =   57.0 ;
+	  HORminP               = - 57.0 ;      -- Hard Over Range for pitch
+
+	  HORmaxY               =   57.0 ;
+	  HORminY               = - 57.0 ;	    -- Hard Over Range for yaw
+
+
+	  TIME5                 = 4      ;      -- specified in point 5, page 4 (value ?)
+
+	  SAFE_COUNTER_TIME     = 3      ; 
+	  TIME_ROLL             = 3      ;
+	  TIME_CROSS_ROLL       = 3      ; 
+
+
+
+
+---------------------------------------------------
+-- Some comparisons needed by FailDetect (for roll)
+---------------------------------------------------
+
+node InNominalRange (r : real) returns (i : bool) ;
+let
+	i = (r < NRmaxR) and (r > NRminR) ; 
+tel
+
+node InHardoverRange (r : real) returns (i : bool) ;
+let
+	i = (r > HORmaxR) or (r < HORminR) ; 
+tel
+
+
+
+
+
+---------------------------------------------------------------------------------------
+-- A main program that does the job, but only for one channel (roll or yaw, pitch being
+-- a little special).
+---------------------------------------------------------------------------------------
+
+node onlyroll2 (
+     xa1, xb1, xa2, xb2, xa3, xb3, xa4, xb4 : real ;  -- transmitted measures
+     ongroundreset, inairreset : bool ;  -- resets
+     disc1, disc2, disc3, disc4 : bool ; -- the wire is disconnected
+     choff1, choff2, choff3, choff4 : bool ;  -- channel offline
+) returns (
+     x : real ; -- the secure value
+     debug_localfailure1, debug_localfailure2, debug_localfailure3, debug_localfailure4 : bool ;
+     debug_cross_failure1, debug_cross_failure2,debug_cross_failure3,debug_cross_failure4 : bool ;
+     debug_ch_failed1, debug_ch_failed2,debug_ch_failed3,debug_ch_failed4 : bool ;
+     debug_st1, debug_st2, debug_st3, debug_st4 : int ;  
+)
+var
+	x1, x2, x3, x4 : real ; -- the values computed by the four channels
+	f1, f2, f3, f4 : bool  ; -- the failure statuses as seen by the four channels
+	ask1, ask2, ask3, ask4 : bool ; -- requests to become reset inhibited
+	allowed1, allowed2, allowed3, allowed4 : bool ; -- answers of the global allocator
+
+let
+    debug_ch_failed1 = f1 ;
+    debug_ch_failed2 = f2 ;
+    debug_ch_failed3 = f3 ;
+    debug_ch_failed4 = f4 ;
+
+
+    (x1, f1, ask1, debug_localfailure1, debug_cross_failure1, debug_st1) = Channel (
+			    ongroundreset, inairreset,
+		            choff1,
+		            xa1, xb1,
+		            disc1,
+		            0.0 -> pre (x2), 0.0 -> pre(x3), 0.0 -> pre(x4), 
+			    false -> pre(f2),false -> pre(f3),false -> pre(f4),
+			    allowed1) ;
+
+    (x2, f2, ask2, debug_localfailure2, debug_cross_failure2, debug_st2) = Channel (
+			    ongroundreset, inairreset,
+		            choff2,
+		            xa2, xb2,
+		            disc2,
+		            0.0 -> pre (x1), 0.0 -> pre(x3), 0.0 -> pre(x4), 
+			    false -> pre(f1), false -> pre(f3), false -> pre(f4),
+			    allowed2) ;
+
+    (x3, f3, ask3, debug_localfailure3, debug_cross_failure3, debug_st3) = Channel (
+			    ongroundreset, inairreset,
+		            choff3,
+		            xa3, xb3,
+		            disc3,
+		            0.0 -> pre (x1), 0.0 -> pre(x2), 0.0 -> pre(x4), 
+                            false -> pre(f1), false -> pre(f2), false -> pre(f4),
+			    allowed3) ;
+
+    (x4, f4, ask4, debug_localfailure4, debug_cross_failure4, debug_st4) = Channel (
+			    ongroundreset, inairreset,
+		            choff4,
+		            xa4, xb4,
+		            disc4,
+		            0.0 -> pre (x1), 0.0 -> pre(x2), 0.0 -> pre(x3), 
+                            false -> pre(f1), false -> pre(f2), false -> pre(f3),
+			    allowed4) ;
+
+    (allowed1, allowed2, allowed3, allowed4) = 
+					Allocator (pre ask1, pre ask2, pre ask3, pre ask4, ongroundreset) ;
+
+    x = Calculate (x1, x2, x3, x4, f1, f2, f3, f4) ;
+tel
+
+
+---------------------------------------------------------------------------------------------
+---------------------------------------------------------------------------------------------
+node Channel (
+	ongroundreset, inairreset : bool ; -- the global inputs 
+	choffi : bool ; -- channel offline 
+	xai, xbi : real ;  -- two inputs
+	disci : bool ; -- inputs disconnected
+	pxother1, pxother2, pxother3 :  real ; -- values computed by the other channels (pre)
+	pfother1, pfother2, pfother3 : bool ; -- failure statuses of the other channels (pre)
+	allowedi : bool ; -- allowed to become reset inhibited
+)
+returns (
+	xi : real ; -- the value computed by this channel
+	fi : bool ; -- the failure status of this channel
+	aski : bool ; -- a request to become reset inhibited
+	debug_localfailure : bool ; -- for observation purposes
+	debug_cross_failure : bool ; -- for observation purposes
+	debug_st : int ; -- for observation purposes
+)
+var
+	local_failure : bool ;
+let
+	(xi, local_failure)  = Monitor (xai, xbi, disci) ;
+
+	(fi, debug_cross_failure, debug_st, aski) = FailDetect (
+		local_failure, xi, 
+		ongroundreset, inairreset, 
+		choffi, 
+		pxother1, pxother2, pxother3,
+		pfother1, pfother2, pfother3,
+      allowedi) ;
+
+	debug_localfailure = local_failure ;
+	
+tel
+
+
+---------------------------------------------------------------------------------------------
+-- Monitor : a part of the channel, that looks for local failures, and chooses one
+-- of the two values, to be transmitted to other channels.
+---------------------------------------------------------------------------------------------
+node Monitor (
+	xa, xb : real ;  -- two values 
+	disc : bool ;    -- the wires are disconnected
+)
+returns (
+	local_value  : real ; -- the value seen by this channel 
+	inline_monitor_failed : bool ; -- detection of a local fault
+) 
+let    
+	-- locally detected failures :
+	-- the two values on the same channel differ two much 
+	-- for a two long time, or the wires are disconnected
+
+	inline_monitor_failed  =
+		maintain (TIME_ROLL,
+			abs (xa - xb) > DELTA_ROLL)
+			or disc ;
+
+	-- and transmit the first value (how to choose ?)
+	local_value = xa ;
+tel
+
+
+---------------------------------------------------------------------------------------------
+-- The main fail detection, with states and reactions to the resets.
+-- There are 3 states :
+--          1)   OK and unlatched faults
+--	    2)   Latched faults, resest allowed
+--	    3)   Latched faults, reset inhibited
+-- The transitions : 
+--          
+-- The way failure is computed (the output) :
+--          in state 1, failure is computed at each step, depending on the non-latched failure
+--	                causes
+--	    in states 2 and 3 : failure = true
+---------------------------------------------------------------------------------------------
+node FailDetect (
+	local_failure : bool ; 
+	xi : real ;
+	ongroundreset, inairreset : bool ;
+	choffi : bool ;
+	pxother1, pxother2, pxother3 : real ; -- other values (pre)
+	pfother1, pfother2, pfother3 : bool ; -- other failures (pre)
+   a: bool ; -- permission to become reset inhibited
+)
+returns (
+	failure : bool ; -- failure detected by this channel
+	debug_cross_failure : bool ; -- for observation
+	debug_st : int ; -- for observation (the state)
+   r : bool ; -- request to become reset inhibited
+)
+var
+	cross_failure : bool ; 
+	ps, state : int ; -- only 1, 2, 3 are relevant
+	from1to2, from1to3, from2to3, from2to1, from3to1 : bool ;
+	NLfaults : bool ;
+	will_latch, reset, foreign_failure : bool ;
+let
+	-- the state -------------------------------------------------------
+	debug_st  = state ;
+	ps        = 1 -> pre(state) ;     -- FABIEN RAJOUTE " 1 -> "
+	state     = 1 ->
+		    if ps=1 then
+	 		    if pre(reset) then 1	  -- reset has priority
+			    else if pre(from1to2) then 2 
+			    else if pre(from1to3) then 3
+			    else 1 
+		    else if ps=2 then 
+			    if pre(from2to1) then 1       -- reset has priority
+			    else if pre(from2to3) then 3
+			    else 2 
+		    else -- ps=3
+			    if pre(from3to1) then 1       -- reset has priority
+			    else 3 ;
+
+
+	-- The output ------------------------------------------------------
+	failure = (state = 2) or (state = 3) or (state = 1 and NLfaults) ;
+
+	-- previous version :
+	-- failure = local_failure or cross_failure or choffi ;
+
+	-- All the transitions ---------------------------------------------
+
+	reset = ongroundreset or (inairreset and not cross_failure) ;
+	foreign_failure = pfother1 or pfother2 or pfother3 ;
+
+	-- non-latched failures
+	NLfaults = choffi or local_failure ; 
+
+	-- latched faults of the first kind (and not reset). go to state 2 only, because the value
+	-- is not in the nominal range, so it might be a "small" error
+
+	from1to2 = will_latch and not InNominalRange (xi) ;
+	will_latch = cross_failure ;
+
+	-- latched faults of the second kind (and not reset). go immediately to state 3 where
+	-- reset is inhibited, because the value is in its nominal range, so this is a real
+	-- error.
+
+	from1to3 = a and will_latch and  InNominalRange (xi) ;
+
+	-- reason for a latched fault to become reset inhibited : will_latch followed immediately
+	-- by a foreign failure, or local failure occurs
+	from2to3 = a and (pre(will_latch) and  foreign_failure  or local_failure) ;
+
+	-- only on ground reset can do that
+	from3to1 = ongroundreset ;
+
+	-- onground reset can do that, and also inair reset if the values are ok
+	from2to1 = reset ;
+	
+   -- request to beconme reset inhibited
+    r = false ->
+          -- (pre(state) = 1 and cross_failure and InNominalRange (xi))
+		  (pre(state) = 1 and cross_failure)
+           or (pre(state) = 2 and
+               (pre(cross_failure) and  foreign_failure) or local_failure);
+
+
+	-- Cross channel comparisons ---------------------------------------------------
+	-- for cross failure, the value xi should be compared only to the foreign values
+	-- that are ok. 
+	-- An error is reported when values differ two much for a too long time
+
+	cross_failure = values_nok (
+		pfother1, pfother2, pfother3,
+		xi, pxother1, pxother2, pxother3) ;
+
+	-- debug -----------------------------------------------------------------------
+	debug_cross_failure = cross_failure ;
+tel
+
+
+
+---------------------------------------------------------------------------------------------
+-- Cross-channel comparisons. The local value xi is compared to those among the foreign
+-- ones that are not declared failed (that's why we need the fail statuses of the three
+-- foreign channels).
+-- Be careful with the position of the MAINTAIN....
+-- Well, we don't really know whether the failure is related to the SAME error being maintained
+-- during TIME_CROSS_ROLL steps, or if it's simply defined by : there has been an error
+-- for at least TIME_CROSS_ROLL steps (but not necessarily the same).
+-- the program below takes the second option.
+---------------------------------------------------------------------------------------------
+
+node values_nok (
+	pfother1, pfother2, pfother3 : bool ; -- foreign values status
+	xi : real ; -- local value 
+	pxother1, pxother2, pxother3 : real ; -- foreign values 
+) 
+returns ( 
+	r : bool -- there is a cross channel error
+)
+var
+	one, two, three : bool ; -- comparisons of xi with the three foreign values
+let
+	one   = abs (xi - pxother1) > CROSS_CH_TOL_ROLL ;
+	two   = abs (xi - pxother2) > CROSS_CH_TOL_ROLL ;
+	three = abs (xi - pxother3) > CROSS_CH_TOL_ROLL ;
+	
+
+	r     =  maintain(TIME_CROSS_ROLL, 
+			  if pfother1 then  -- don't take this one into account
+				if pfother2 then -- the same
+				      if pfother3 then 
+					  false 
+				      else
+					  three 
+			        else 
+ 				      if pfother3 then 
+					  two
+				      else
+					 (two and three)
+			  else if pfother2 then
+				if pfother3 then one else (one and three)
+			  else if pfother3 then
+				(one and two)
+			  else
+				(one and two and three)) ;
+
+
+tel 
+
+
+
+
+
+---------------------------------------------------------------------------------------------
+-- Allocator, for allowing the channels to become reset inhibited
+---------------------------------------------------------------------------------------------
+node Allocator(r1,r2,r3,r4,reset: bool)
+returns (a1,a2,a3,a4: bool);
+-- receives requests from the 4 units
+-- delivers autorizations
+-- ensures that at most 2 authorized since the last reset
+var nb_aut, already: int;
+let
+   already = if (true -> reset) then 0 else pre(nb_aut);
+   a1 = r1 and already <= 1;
+   a2 = r2 and 
+        (  (not r1 and already <= 1)
+        or (r1 and already = 0) 
+        );
+   a3 = r3 and
+        (  (not r1 and not r2  and already <= 1)
+        or (#(r1,r2) and already = 0) 
+        );
+   a4 = r4 and
+        (  (not r1 and not r2 and not r3 and already <= 1)
+        or (#(r1,r2,r3) and already = 0) 
+        );
+   nb_aut = if (true -> reset) then 0
+            else pre(nb_aut) +
+                 if a1 then 1 else 0 +
+                 if a2 then 1 else 0 +
+                 if a3 then 1 else 0 +
+                 if a4 then 1 else 0 ;
+tel
+
+
+---------------------------------------------------------------------------------------------
+-- the voter
+---------------------------------------------------------------------------------------------
+node Calculate (
+	x1, x2, x3, x4 : real ;  -- four values given by the channels
+	f1, f2, f3, f4 : bool ; -- failure statuses seen by the four channels 
+) 
+returns  (
+	x : real 
+)
+var 
+	zero_roll, one_roll, two_roll, three_roll : bool ; -- numbers of failures 
+	cpt_roll : int ; -- a counter 
+let
+	cpt_roll = 0 -> if three_roll then SAFE_COUNTER_TIME
+	else if pre (cpt_roll)>0 then pre(cpt_roll) - 1
+	else 0 ;
+
+
+	zero_roll  = noneof (f1, f2, f3, f4) ;
+	one_roll   = oneoffour (f1, f2, f3, f4) ;
+	two_roll   = twooffour (f1, f2, f3, f4) ;
+	three_roll = threeoffour (f1, f2, f3, f4) ;
+
+	x = if (zero_roll and cpt_roll = 0 ) then
+		OlympicAverage (x1, x2, x3, x4)
+	else if (one_roll and cpt_roll = 0 ) then
+		Median (x1, x2, x3, x4, f1, f2, f3, f4 )
+	else if (two_roll and cpt_roll = 0 ) then
+		Average (x1, x2, x3, x4, f1, f2, f3, f4 )
+	else FAIL_SAFE_ROLL_VALUE ;
+
+tel
+
+
+
+node noneof (f1, f2, f3, f4 : bool) returns (r : bool) 
+let
+	 r = not f1 and not f2 and not f3 and not f4 ;
+tel 
+
+node oneoffour (f1, f2, f3, f4 : bool) returns (r : bool) 
+let
+	r = f1 and not f2 and not f3 and not f4 or
+	    f2 and not f1 and not f3 and not f4 or
+	    f3 and not f1 and not f2 and not f4 or
+	    f4 and not f1 and not f2 and not f3 ;
+tel 
+
+node twooffour (f1, f2, f3, f4 : bool) returns (r : bool) 
+let
+	r = f1 and (f2 and not f3 and not f4  or
+		    f3 and not f2 and not f4  or
+	 	    f4 and not f2 and not f3)  or
+            f2 and (f1 and not f3 and not f4  or
+		    f3 and not f1 and not f4  or
+	 	    f4 and not f1 and not f3)  or
+            f3 and (f2 and not f1 and not f4  or
+		    f1 and not f2 and not f4  or
+	 	    f4 and not f2 and not f1)  or
+	    f4 and (f2 and not f3 and not f1  or
+		    f3 and not f2 and not f1  or
+	 	    f1 and not f2 and not f3) ; 
+tel
+
+node threeoffour (f1, f2, f3, f4 : bool) returns (r : bool) 
+let
+	r = oneoffour (not f1, not f2, not f3, not f4) ;
+tel 
+
+
+node Median (x1, x2, x3, x4 : real ; f1, f2, f3, f4 : bool) returns (r : real)
+-- one of the four f is true exactly
+let
+	r = if f1 then MedianValue3 (x2, x3, x4)
+	    else if f2 then MedianValue3 (x1, x3, x4)
+	    else if f3 then MedianValue3 (x1, x2, x4)
+	    else            MedianValue3 (x1, x2, x3) ;
+tel
+
+
+node Average (x1, x2, x3, x4 : real ; f1, f2, f3, f4 : bool) returns (r : real)
+-- two of the f are true, exactly
+let
+	r = if f1 then 
+	      if f2 then Average2 (x3, x4) 
+	      else if f3 then Average2 (x2, x4) 
+	      else Average2 (x3, x2)
+	else if f2 then 
+	      if f1 then Average2 (x3, x4) 
+	      else if f3 then Average2 (x1, x4) 
+	      else Average2 (x3, x1) 
+	else if f3 then 
+	      if f2 then Average2 (x1, x4) 
+	      else if f4 then Average2 (x2, x1) 
+	      else Average2 (x4, x2) 
+	else 
+	      if f2 then Average2 (x3, x1) 
+	      else if f3 then Average2 (x2, x1) 
+	      else Average2 (x3, x2) ;
+tel
+
+
+-- ==========================================================================
+-- Some arithmetic functions 
+-- ==========================================================================
+
+node abs (v : real) returns (a : real) ;
+let
+	a = if v >= 0.0 then v else -v ;
+tel
+
+
+
+
+node OlympicAverage (one, two, three, four : real) returns (m : real) ;
+let
+     m = (one + two + three + four 
+         - max4 (one, two, three, four)
+         - min4 (one, two, three, four)) / 2.0 ;
+tel
+
+node MedianValue3 (a, b, c : real) returns (z : real); 
+let
+	z = a + b + c - min2 (a, min2(b,c)) - max2 (a, max2(b,c)) ;
+tel
+
+node Average2(a, b: real) returns (z : real); 
+let 
+	z = (a+b)/2.0 ; 
+tel
+
+
+
+node max4 (one, two, three, four : real) returns (m : real) ;
+let
+	m = max2 (max2 (one, two), max2 (three, four)) ;
+tel
+
+node max2 (one, two  : real) returns (m : real) ;
+let
+	m = if one > two then one else two ;
+tel
+
+node min4 (one, two, three, four : real) returns (m : real) ;
+let
+	m = min2 (min2 (one, two), min2 (three, four)) ;
+tel
+
+node min2 (one, two  : real) returns (m : real) ;
+let
+	m = if one < two then one else two ;
+tel
+
+
+-- ==========================================================================
+-- Some time functions 
+-- ==========================================================================
+
+
+node maintain (n : int ; val : bool) returns (m : bool) ;
+var cpt : int ;
+let
+	cpt = (if val then 1 else 0) ->
+	       (if val then pre(cpt) + 1 else 0) ;
+
+	m   = (cpt >= n) ;
+tel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/should_work/fab_test/test.exp b/src/test/should_work/fab_test/test.exp
new file mode 100644
index 00000000..b30d24c4
--- /dev/null
+++ b/src/test/should_work/fab_test/test.exp
@@ -0,0 +1 @@
+bob def ex iterate iter lecteur lucky morel2 morel3 morel4 morel5 morel noAlarm notTwo onlyroll2 onlyroll test titi toolate toto 
\ No newline at end of file
diff --git a/src/test/should_work/fab_test/test.lus b/src/test/should_work/fab_test/test.lus
new file mode 100644
index 00000000..764cf6d5
--- /dev/null
+++ b/src/test/should_work/fab_test/test.lus
@@ -0,0 +1,19 @@
+
+node test(b1, b2 : bool) returns (b3, b4, b5, b6 : bool);
+let
+    b3, b4, b5, b6 = (three_outputs(two_outputs(b1,b2),true), false);
+tel
+
+node three_outputs(c1, c2, c3 : bool) returns (c4, c5, c6 : bool);
+let 
+    c4, c5, c6 = (true, false, true) -> if c1 
+                                        then ((c1,c2),c3)
+                                        else (c1,(c2,c3)); 
+tel
+
+node two_outputs(c1, c2 : bool) returns (c4, c5 : bool);
+let
+    c4 = false -> pre c1;
+    c5 = true -> pre c2;
+tel
+
diff --git a/src/test/should_work/fab_test/test.res b/src/test/should_work/fab_test/test.res
new file mode 100644
index 00000000..8de88a41
--- /dev/null
+++ b/src/test/should_work/fab_test/test.res
@@ -0,0 +1 @@
+bob def ex iter iterate lecteur lucky morel morel2 morel3 morel4 morel5 noAlarm notTwo onlyroll onlyroll2 test titi toolate toto 
\ No newline at end of file
diff --git a/src/test/should_work/fab_test/titi.lus b/src/test/should_work/fab_test/titi.lus
new file mode 100644
index 00000000..8d0e7896
--- /dev/null
+++ b/src/test/should_work/fab_test/titi.lus
@@ -0,0 +1,5 @@
+
+node titi(a,b:bool) returns (x:bool);
+let
+    x = current (a when b);
+tel
diff --git a/src/test/should_work/fab_test/toolate.lus b/src/test/should_work/fab_test/toolate.lus
new file mode 100644
index 00000000..70ec4455
--- /dev/null
+++ b/src/test/should_work/fab_test/toolate.lus
@@ -0,0 +1,90 @@
+
+--include "bug_lib2.lus"
+
+const ze_const_int = 5 ;
+
+type bool4 = bool^ze_const_int ;
+     tab2 = int^3^4;
+     tab1 = int^2;
+     tab3 = int^5^6^7;
+     really = real;
+
+
+
+-- " X vaut vrai ssi C a valu vrai au moins une fois 
+--   entre A et B "
+node once_from_to (C,A,B: bool) returns (X: bool);
+let
+-- WITH BUG :
+	-- X = implies(B, once_since(C,A));
+-- WITHOUT BUG :
+	X = implies(B, false -> pre(once_since(C,A)));
+tel
+
+-- " X vaut vrai ssi C a valu vrai depuis A "
+node once_since (C,A: bool) returns (X: bool);
+let
+-- WITH BUG :
+	-- X = if A then false else 
+-- WITHOUT BUG :
+        X = if A then C else
+            if after(A) then C or (false -> pre(X))
+	    else false;
+tel
+
+-- " XimpliesY est vrai ssi X=>Y "
+node implies (X,Y : bool) returns (XimpliesY : bool);
+let
+	XimpliesY = (not X) or Y;
+tel
+
+-- " afterX vaut vrai ssi X a valu vrai dans le passe "
+node after (X: bool) returns (afterX: bool);
+var
+     bidon1, bidon2 : bool;
+let
+	afterX = false -> pre(X or afterX) or bidon2 and bidon1;
+        (bidon1, bidon2) = bidon(X);
+tel
+
+-- "edge detecte un changement de front sur le signal d'entree. "
+node edge_detect (in : bool) returns (edge : bool);
+var
+     bidon1, bidon2 : bool;
+let
+        edge = false -> in and not(pre(in)) or bidon2 and bidon1;
+        (bidon1, bidon2) = bidon(in);
+tel
+
+node bidon(in: bool) returns (out1, out2 : bool);
+var
+    toto : tab1;
+let
+        toto[0] = 10;
+	toto[1] = 5;
+
+        out1 = true or in and (toto[0]<20);
+--	out1 = true or in;
+--	out2 = false and in and (toto[1]<10);
+      out2 = false and in;
+tel
+
+-- Exemple de programme qui bug :
+
+-- " le noeud toolate declenche une alarme si
+--   pendant la periode ou active=vrai, action
+--   n'a pas eu lieu "
+
+node toolate (active,action : bool) returns (alarm : bool);
+var
+	begin,en : bool;
+let
+-- WITH BUG :
+--	begin = active and (true -> not pre(active));
+-- WITHOUT BUG :
+	begin = active and (false -> not pre(active));
+	en = (not active) and (false -> pre active);
+ 	alarm = not once_from_to(action,begin,en);
+tel
+
+
diff --git a/src/test/should_work/fab_test/toto.lus b/src/test/should_work/fab_test/toto.lus
new file mode 100644
index 00000000..6a580d1c
--- /dev/null
+++ b/src/test/should_work/fab_test/toto.lus
@@ -0,0 +1,8 @@
+
+node toto(a,b:bool) returns (x:bool);
+var
+    c : bool when b;
+let
+    c = a when b; 
+    x = current (current (a when b when c));
+tel
diff --git a/src/test/should_work/lionel/FillFollowedByRed.lus b/src/test/should_work/lionel/FillFollowedByRed.lus
new file mode 100644
index 00000000..3e684c4b
--- /dev/null
+++ b/src/test/should_work/lionel/FillFollowedByRed.lus
@@ -0,0 +1,38 @@
+
+
+node filled(acc_in : real) returns (acc_out : real; elt_out : real);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   acc_out = (acc_in + 1.);
+   elt_out = (acc_in + 1.);
+tel
+
+
+node reduced(acc_in : bool; elt_in : real) returns (ok : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+let
+   ok = acc_in and (0. < elt_in);
+tel
+
+
+node FillFollowedByRed(initFill : real) returns (ok : bool);
+-- Assumes : 
+-- true;
+-- Guarantees : 
+-- true;
+-- Body : 
+   var TabOutFill : real^10; 
+       bidon : real;
+let
+   bidon,TabOutFill = fill<<filled;10>>(initFill);
+--   TabOutFill = fill<<filled;10>>(0);
+   ok = red<<reduced;10>>(true,TabOutFill);
+tel
diff --git a/src/test/should_work/lionel/Gyroscope.lus b/src/test/should_work/lionel/Gyroscope.lus
new file mode 100644
index 00000000..4d692997
--- /dev/null
+++ b/src/test/should_work/lionel/Gyroscope.lus
@@ -0,0 +1,208 @@
+const DELTA_ROLL = 2.0;
+const DELTA_PITCH = 2.0;
+const DELTA_YAW = 2.0;
+
+const GOD_ROLL = 15.0;
+const GOD_PITCH = 16.0;
+const GOD_YAW = 14.0;
+
+const DELTA_TO_GOD_ROLL = 2.0;
+const DELTA_TO_GOD_PITCH = 2.0;
+const DELTA_TO_GOD_YAW = 2.0;
+
+const TIME = 3;
+
+type Valid_ChannelT={local_failure : bool; local_value : real};
+type Faulty_ChannelT={valuea : real; valueb : real};
+type Faulty_Array=Faulty_ChannelT^4^3;
+
+
+node countFalse(accu_in : real; elt_in : Valid_ChannelT) returns (accu_out : real);
+let
+   accu_out = if(elt_in.local_failure) then accu_in else (accu_in + 1.0);
+tel
+
+
+node countValidChannels(channels : Valid_ChannelT^4) returns (nb : real);
+
+let
+   nb = red<<countFalse;4>>(0.0,channels);
+tel
+
+
+node assumeSum (accu_in : real; elt_in : real) returns (assumeOK : bool);
+var varBidon : real;
+let
+  assumeOK = varBidon < elt_in;
+tel
+
+node guaranteeSum (accu_in : real; elt_in : real; accu_out : real) returns (guaranteeOK : bool);
+var otherVarBidon : real;
+let
+  guaranteeOK = elt_in + otherVarBidon < accu_out;
+tel
+
+
+
+node sum(accu_in : real; elt_in : real) returns (accu_out : real)
+%ASSUME:assumeSum%
+%GUARANTEE:guaranteeSum%;
+let
+   accu_out = (accu_in + elt_in);
+tel
+
+
+node masking(channel : Valid_ChannelT) returns (out : real);
+let
+   out = if(channel.local_failure) then 0.0 else channel.local_value;
+tel
+
+
+node abs(in : real) returns (out : real);
+let
+   out = if((in < 0.0)) then -(in) else in;
+tel
+
+
+node assumeVoter(channels : Valid_ChannelT^4; god : real; delta_to_god : real) returns (assumeOK : bool);
+let
+   assumeOK = true;
+tel
+
+
+node iteratedVoter(acc_in :  bool; channel : Valid_ChannelT; god,  delta_to_god, vote : real) returns (acc_out : bool);
+let
+  acc_out = acc_in and (channel.local_failure or (abs((vote - channel.local_value)) < delta_to_god));
+tel
+
+node guaranteeVoter(channels : Valid_ChannelT^4; god : real; delta_to_god : real; vote : real) returns (guaranteeOK : bool);
+let
+  guaranteeOK = red<<iteratedVoter;4>>(true, channels, god^4, delta_to_god^4, vote^4);
+tel
+
+
+node Voter(channels : Valid_ChannelT^4; god : real; delta_to_god : real) returns (vote : real)
+%ASSUME:assumeVoter%
+%GUARANTEE:guaranteeVoter%;
+   var globalSum : real; nbValid : real; mask : real^4; 
+let
+   nbValid = countValidChannels(channels);
+   globalSum = red<<sum;4>>(0.0,mask);
+   vote = (globalSum / nbValid);
+   mask = map<<masking;4>>(channels);
+tel
+
+
+node Voter2(channels : Valid_ChannelT^4; god : real; delta_to_god : real) returns (vote : real)
+   var globalSum : real; nbValid : real; mask : real^4; 
+let
+   nbValid = 0.0;
+   globalSum = 0.0;
+   vote = 0.0;
+   mask = map<<masking;4>>(channels);
+tel
+
+
+
+--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+node assumeChannel(inChannel : Faulty_ChannelT; delta : real; god : real; delta_to_god : real) returns (assumeOK : bool);
+let
+   assumeOK = true;
+tel
+
+
+node guaranteeChannel(inChannel : Faulty_ChannelT; delta : real; god : real; delta_to_god : real; outChannel : Valid_ChannelT) returns (guaranteeOK : bool);
+let
+   guaranteeOK = outChannel.local_failure or ((abs((inChannel.valuea - outChannel.local_value)) < delta) and (abs((inChannel.valueb - outChannel.local_value)) < delta));
+tel
+
+
+node Channel(inChannel : Faulty_ChannelT; delta : real; god : real; delta_to_god : real) returns (outChannel : Valid_ChannelT)
+%ASSUME:assumeChannel%
+%ASSUME:guaranteeChannel%;
+var maintain : bool;
+let
+-- Il faut se servir de l'utilitaire Maintain:  
+-- ce noeud détecte des problèmes pendant une certaine periode sur un même channel 
+   maintain = Maintain(TIME, abs((inChannel.valuea - inChannel.valueb))>delta);
+   outChannel = {local_failure = maintain, 
+                 local_value = if(maintain) then 0.0 else ((inChannel.valuea + inChannel.valueb) / 2.0)};
+-- Vieille version, sans le maintain:  
+--   outChannel = {local_failure = (abs((inChannel.valuea - inChannel.valueb)) > delta),
+--local_value = if((abs((inChannel.valuea - inChannel.valueb)) > delta)) then 0.0 else ((inChannel.valuea + inChannel.valueb) / 2.0)};
+tel
+
+node Maintain (n : int ; val : bool) returns (m : bool) ;
+var cpt : int ;
+let
+        cpt = (if val then 1 else 0) ->
+               if val then min_int (n, pre(cpt) + 1) else 0 ; 
+
+        m   = (cpt >= n) ;
+tel
+
+
+node min_int(n1, n2 : int) returns (n : int);
+let
+  n = if n1>n2 then n2 else n1;
+tel
+--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+node TooFar(nbToFarIn : int; channel : Faulty_ChannelT; god : real; delta_to_god : real) returns (nbToFarOut : int);
+let
+   nbToFarOut = if((abs((channel.valuea - god)) < delta_to_god)) then (nbToFarIn + 1) else nbToFarIn;
+tel
+
+
+node assumeEvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real) returns (assumeOK : bool);
+var NbToFar : int;
+let
+   NbToFar = red<<TooFar;4>>(0,channels,god^4,delta_to_god^4);
+   assumeOK = NbToFar <= 1;
+tel
+
+node guaranteeEvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real; AxisValue : real) returns (guaranteeOK : bool);
+let
+  guaranteeOK = abs((AxisValue - god)) < delta_to_god;
+tel
+
+
+node EvaluateAxis(channels : Faulty_ChannelT^4; delta : real; god : real; delta_to_god : real) returns (AxisValue : real)
+%ASSUME:assumeEvaluateAxis%
+%GUARANTEE:guaranteeEvaluateAxis%;
+   var resChannels : Valid_ChannelT^4; 
+       AxisValue2 : real;
+let
+   resChannels = map<<Channel;4>>(channels,delta^4,god^4,delta_to_god^4);
+   AxisValue = Voter(resChannels, god, delta_to_god);
+   AxisValue2 = Voter2(resChannels, god, delta_to_god);
+tel
+--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+node ValueIsSecure(secure_value : real; delta_to_god_value : real; god_value : real) returns (is_valid : bool);
+let
+   is_valid = (abs((secure_value - god_value)) < delta_to_god_value);
+tel
+
+
+node ValueIsSecureII(accu_in : bool; secure_value : real; delta_to_god, god_value : real) returns (is_valid : bool);
+let
+   is_valid = ((abs((secure_value - god_value)) < 2.0) and accu_in);
+tel
+
+
+node Gyroscope(axis : Faulty_Array) returns (valid : bool);
+   var secure_values : real^3; 
+let
+   secure_values = map<<EvaluateAxis;3>>(axis,[DELTA_ROLL,DELTA_PITCH,DELTA_YAW],[GOD_ROLL,GOD_PITCH,GOD_YAW],[DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW]);
+--   valid = forall<<ValueIsSecure;3>>(secure_values,[DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW],[GOD_ROLL,GOD_PITCH,GOD_YAW]);
+   valid = red<<ValueIsSecureII;3>>(true,secure_values,[DELTA_TO_GOD_ROLL,DELTA_TO_GOD_PITCH,DELTA_TO_GOD_YAW],[GOD_ROLL,GOD_PITCH,GOD_YAW]);
+tel
diff --git a/src/test/should_work/lionel/ProduitBool/produitBool.lus b/src/test/should_work/lionel/ProduitBool/produitBool.lus
new file mode 100644
index 00000000..bb117d49
--- /dev/null
+++ b/src/test/should_work/lionel/ProduitBool/produitBool.lus
@@ -0,0 +1,110 @@
+const size :  int = 10;
+
+
+-- ligne[i] = acc_in.multiplieur[i] si i>=acc_in.acc_in_PLC.rank et i<acc_in.acc_in_PLC.rank + size
+-- ligne[i] = 0 sinon
+node shift(acc_in : Tacc_in) returns (ligne : bool^(2*size); 
+                                      bidon : Tacc_inShift2);
+let
+  bidon, ligne = fill<<shiftFill;2*size>>({multiplieur = acc_in.multiplieur; -- cet accumulateur n'est pas modifié
+                                          rank = acc_in.rank;  -- cet accumulateur n'est pas modifié
+                                          actual_rank = 0});  -- ce accumulateur sert juste à compter. A la fin il vaut toujours 20
+tel
+
+node shiftFill(acc_in : Tacc_inShift2) returns (acc_out : Tacc_inShift2; elt_out : bool);
+let
+  acc_out = 
+    {--acc_in_PLC =  acc_in.acc_in_PLC;
+     multiplieur = acc_in.multiplieur;
+     rank = acc_in.rank;
+     actual_rank = acc_in.actual_rank + 1};
+
+  elt_out =-- if(acc_in.actual_rank>=acc_in.acc_in_PLC.rank
+           --    and acc_in.actual_rank<acc_in.acc_in_PLC.rank+size)
+           -- then selectElementOfRank_inArray_(acc_in.actual_rank, acc_in.acc_in_PLC.multiplieur)
+           -- else false;
+    if(acc_in.actual_rank>=acc_in.rank
+       and acc_in.actual_rank<acc_in.rank+size)
+    then selectElementOfRank_inArray_(acc_in.actual_rank - acc_in.rank, acc_in.multiplieur)
+    else false;
+tel
+
+
+
+
+-- est-ce qu'un element est dans un tableau
+type T_isElementOf_ = {eltToSearch : bool; iselementof : bool};
+
+node _isElementOf_(e : bool; t : bool^size) returns (iselementof : bool);
+var acc_out : T_isElementOf_;
+let
+  acc_out = red<<iterated_isElementOf_;bool>>({eltToSearch = e; iselementof = false}, t);
+  iselementof = acc_out.iselementof;
+tel
+
+
+node iterated_isElementOf_(acc_in : T_isElementOf_; elt_in : bool) returns (acc_out : T_isElementOf_);
+let
+  acc_out = {eltToSearch = acc_in.eltToSearch;
+             iselementof = acc_in.iselementof or acc_in.eltToSearch = elt_in};
+tel
+
+type iteratedStruct = {currentRank : int; rankToSelect : int; elementSelected : bool};
+
+-- noeud de selection d'un element dans un tableau
+node selectElementOfRank_inArray_(rankToSelect : int;array : bool^size) returns (elementSelected : bool)
+var iterationResult : iteratedStruct;
+let
+  iterationResult = red<<selectOneStage;size>>({currentRank = 0; rankToSelect = rankToSelect; elementSelected = array[0]}, array);
+  elementSelected = iterationResult.elementSelected; 
+tel
+
+
+node selectOneStage(acc_in : iteratedStruct; currentElt : bool) returns (acc_out : iteratedStruct)
+let
+  acc_out = {currentRank = acc_in.currentRank+1;
+             rankToSelect = acc_in.rankToSelect;
+             elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
+                               then currentElt
+                               else acc_in.elementSelected};
+tel
+
+
+
+
+type Tacc_in = {
+     multiplieur : bool^size; 
+     rank : int};
+
+type Tacc_inShift = {
+     acc_in_PLC : Tacc_in; 
+     actual_rank : int
+     };
+
+
+type Tacc_inShift2 = {
+     multiplieur : bool^size;
+     rank : int;
+     actual_rank : int};
+
+
+
+node PLC(acc_in : Tacc_in; multiplicande : bool) returns (ligne : bool^(2*size));
+let
+  ligne = if multiplicande=false
+          then multiplicande ^ (2*size)
+          else shift(acc_in);
+tel
+
+
+node produitBool(multiplicande, multiplieur : bool^size)
+--returns (produit :  bool^(2*n));
+returns (matrice : bool^(2*size)^size);
+var bidon : Tacc_in;
+--    matrice : bool^2size^size;
+let
+  bidon, matrice = map_red<<PLC, size>>({multiplieur = multiplieur; rank = 0}, multiplicande);
+--  produit = red<<???;size>>(0^(2*size), matrice);
+tel
+
+
diff --git a/src/test/should_work/lionel/ProduitBool/shiftFill_ludic.lus b/src/test/should_work/lionel/ProduitBool/shiftFill_ludic.lus
new file mode 100644
index 00000000..07c428a2
--- /dev/null
+++ b/src/test/should_work/lionel/ProduitBool/shiftFill_ludic.lus
@@ -0,0 +1,58 @@
+-- file `shiftFill_ludic.lus' generated by lc
+-- lustreV6 compiler version 1.1
+
+-- internal type(s) definition(s)  
+  type T1_ARRAY = bool^10;
+  type T2_STRUCT = { multiplieur: T1_ARRAY; rank: int; actual_rank: int };
+  type T3_STRUCT = { currentRank: int; rankToSelect: int; elementSelected: bool };
+  type T4_STRUCT = { multiplieur: T1_ARRAY; rank: int };
+  type T5_STRUCT = { acc_in_PLC: T4_STRUCT; actual_rank: int };
+  type T6_STRUCT = { eltToSearch: bool; iselementof: bool };
+
+-- types aliases and constantes declarations
+type t_T_isElementOf_ = T6_STRUCT;
+type t_Tacc_in = T4_STRUCT;
+type t_Tacc_inShift = T5_STRUCT;
+type t_iteratedStruct = T3_STRUCT;
+type t_Tacc_inShift2 = T2_STRUCT;
+const c_size = 10;
+
+-- operators 
+node n_selectOneStage(
+ i_acc_in : T3_STRUCT;
+ i_currentElt : bool;
+ ) returns ( 
+ o_acc_out : T3_STRUCT;
+ );
+let
+   o_acc_out = T3_STRUCT{ currentRank = (i_acc_in.currentRank + 1); rankToSelect = i_acc_in.rankToSelect; elementSelected = (if (i_acc_in.currentRank = i_acc_in.rankToSelect) 
+		      then  i_currentElt 
+		      else  i_acc_in.elementSelected )};
+tel
+
+node n_selectElementOfRank_inArray_(
+ i_rankToSelect : int;
+ i_array : T1_ARRAY;
+ ) returns ( 
+ o_elementSelected : bool;
+ );
+var
+ v_iterationResult : T3_STRUCT;
+let
+   v_iterationResult = red<<n_selectOneStage; c_size>>(T3_STRUCT{ currentRank = 0; rankToSelect = i_rankToSelect; elementSelected = i_array[0]}, i_array);
+   o_elementSelected = v_iterationResult.elementSelected;
+tel
+
+node n_shiftFill(
+ i_acc_in : T2_STRUCT;
+ ) returns ( 
+ o_acc_out : T2_STRUCT;
+ o_elt_out : bool;
+ );
+let
+   o_acc_out = T2_STRUCT{ multiplieur = i_acc_in.multiplieur; rank = i_acc_in.rank; actual_rank = (i_acc_in.actual_rank + 1)};
+   o_elt_out = (if ((i_acc_in.actual_rank >= i_acc_in.rank) and (i_acc_in.actual_rank < (i_acc_in.rank + c_size))) 
+		      then  n_selectElementOfRank_inArray_(i_acc_in.actual_rank, i_acc_in.multiplieur) 
+		      else  false );
+tel
+
diff --git a/src/test/should_work/lionel/ProduitBool/shift_ludic.lus b/src/test/should_work/lionel/ProduitBool/shift_ludic.lus
new file mode 100644
index 00000000..3393e232
--- /dev/null
+++ b/src/test/should_work/lionel/ProduitBool/shift_ludic.lus
@@ -0,0 +1,70 @@
+-- file `shift_ludic.lus' generated by lc
+-- lustreV6 compiler version 1.1
+
+-- internal type(s) definition(s)  
+  type T1_ARRAY = bool^10;
+  type T2_STRUCT = { multiplieur: T1_ARRAY; rank: int; actual_rank: int };
+  type T3_ARRAY = bool^20;
+  type T4_STRUCT = { currentRank: int; rankToSelect: int; elementSelected: bool };
+  type T5_STRUCT = { multiplieur: T1_ARRAY; rank: int };
+  type T6_STRUCT = { acc_in_PLC: T5_STRUCT; actual_rank: int };
+  type T7_STRUCT = { eltToSearch: bool; iselementof: bool };
+
+-- types aliases and constantes declarations
+type t_T_isElementOf_ = T7_STRUCT;
+type t_Tacc_in = T5_STRUCT;
+type t_Tacc_inShift = T6_STRUCT;
+type t_iteratedStruct = T4_STRUCT;
+type t_Tacc_inShift2 = T2_STRUCT;
+const c_size = 10;
+
+-- operators 
+node n_selectOneStage(
+ i_acc_in : T4_STRUCT;
+ i_currentElt : bool;
+ ) returns ( 
+ o_acc_out : T4_STRUCT;
+ );
+let
+   o_acc_out = T4_STRUCT{ currentRank = (i_acc_in.currentRank + 1); rankToSelect = i_acc_in.rankToSelect; elementSelected = (if (i_acc_in.currentRank = i_acc_in.rankToSelect) 
+		      then  i_currentElt 
+		      else  i_acc_in.elementSelected )};
+tel
+
+node n_selectElementOfRank_inArray_(
+ i_rankToSelect : int;
+ i_array : T1_ARRAY;
+ ) returns ( 
+ o_elementSelected : bool;
+ );
+var
+ v_iterationResult : T4_STRUCT;
+let
+   v_iterationResult = red<<n_selectOneStage; c_size>>(T4_STRUCT{ currentRank = 0; rankToSelect = i_rankToSelect; elementSelected = i_array[0]}, i_array);
+   o_elementSelected = v_iterationResult.elementSelected;
+tel
+
+node n_shiftFill(
+ i_acc_in : T2_STRUCT;
+ ) returns ( 
+ o_acc_out : T2_STRUCT;
+ o_elt_out : bool;
+ );
+let
+   o_acc_out = T2_STRUCT{ multiplieur = i_acc_in.multiplieur; rank = i_acc_in.rank; actual_rank = (i_acc_in.actual_rank + 1)};
+   o_elt_out = (if ((i_acc_in.actual_rank >= i_acc_in.rank) and (i_acc_in.actual_rank < (i_acc_in.rank + c_size))) 
+		      then  n_selectElementOfRank_inArray_(i_acc_in.actual_rank, i_acc_in.multiplieur) 
+		      else  false );
+tel
+
+node n_shift(
+ i_acc_in : T5_STRUCT;
+ ) returns ( 
+ o_ligne : T3_ARRAY;
+ );
+var
+ v_bidon : T2_STRUCT;
+let
+   (v_bidon, o_ligne) = fill<<n_shiftFill; (2 * c_size)>>(T2_STRUCT{ multiplieur = i_acc_in.multiplieur; rank = i_acc_in.rank; actual_rank = 0});
+tel
+
diff --git a/src/test/should_work/lionel/arrays.lus b/src/test/should_work/lionel/arrays.lus
new file mode 100644
index 00000000..1d0739d9
--- /dev/null
+++ b/src/test/should_work/lionel/arrays.lus
@@ -0,0 +1,86 @@
+(* Combinaison d'itarateurs *)
+
+
+---------- RED de RED ----------------
+
+const n = 4;
+const m = 3;
+const p = 2;
+
+-- node monplus = red<<+; 3>> ;   --erreur
+-- node monplus = red<<Lustre::iplus; 3>> ;   --erreur
+-- node monplus = red<<=>; 3>> ;   --erreur
+
+node big_sum(x : int^n^m^p) returns (s : int);
+let
+	s = red<< red<< red<<+,  n>>,  m >>,  p >>(0, x);
+tel
+
+--le même style en booléen ...
+
+node big_or(x : bool^n^m^p) returns (s : bool);
+let
+	s = red<< red<< red<<or ; n>> ; m >> ; p >>(false, x);
+tel
+
+node big_xor(x : bool^n^m^p) returns (s : bool);
+let
+	s = red<< red<< red<<xor ; n>> ; m >> ; p >>(false, x);
+tel
+---------- FILL de FILL -------------
+
+node incr(accin : int) returns (accout, val : int);
+let
+	accout = accin+1;
+	val = accin; 
+tel
+
+-- incr : int -> int * int
+-- F  = fill<<incr ; n>> : int -> int * int^n
+-- G  = fill<<F ; m>>    : int -> int * int^n^m
+-- H  = fill<<G ; m>>    : int -> int * int^n^m^p
+
+node big_incr(init : int) returns (x : int^n^m^p);
+var accout : int;
+let
+	accout, x = fill<< fill<< fill<<incr; n>>; m >>; p>>(init);
+tel
+
+---------- MAP_RED de MAP_RED -------------
+
+type byte = bool^n;
+type word = byte^m;
+type long = word^p;
+
+node full_adder(ci, x, y : bool) returns (co, s : bool);
+let
+	s = ci xor x xor y ;
+	co = if ci then (x or y) else (x and y);	
+tel
+
+node add_byte(x, y : byte) returns (s : byte);
+var co : bool;
+let
+	co, s = map_red<<full_adder; n>>(false, x, y);
+tel
+
+node add_long (x, y : long) returns ( s : long);
+var co : bool;
+let
+	co, s = map_red<<map_red<<map_red<<full_adder; n>>; m>>; p>>(false, x, y);
+tel
+
+----------- un noeud principale pour tester le tout ----------------------
+type tab3d = int^n^m^p;
+
+node arrays( init_incr: int; init_long: long ) 
+		returns ( ok: bool; red_res : int; map_red_res : long );
+var 
+			fill_res : tab3d;	
+let
+		red_res = big_sum(fill_res);
+		fill_res = big_incr(init_incr);
+		map_red_res = init_long -> add_long(init_long, pre map_red_res);
+		ok = false -> big_xor( map_red_res );
+tel
+
diff --git a/src/test/should_work/lionel/calculs_max.lus b/src/test/should_work/lionel/calculs_max.lus
new file mode 100644
index 00000000..27fe7f8d
--- /dev/null
+++ b/src/test/should_work/lionel/calculs_max.lus
@@ -0,0 +1,80 @@
+--Exemple qui calcule les deux max d'un tableaux et leur indice
+-- Computes the 2 maximum values of an array of integers (along with their indices)
+--             Author : L.Morel
+--             Started on :  ???? (a long long time ago)
+--             Last update : August 21th 2002 (for compliance to ludic)
+
+
+const taille = 10;
+
+type struct_max = {max1 : int; 
+     max2 : int;
+     imax1 : int; 
+     imax2 : int; 
+     icourant : int};
+
+
+
+type struct_fill_bool = {imax1 : int; 
+     imax2 : int; 
+     icourant : int};
+
+type int_arrays = int^taille;
+
+type bool_arrays = bool^taille;
+
+
+node max(strin : struct_max; ecourant : int) 
+                returns (strout : struct_max);
+
+
+let
+        strout = 
+                        if (ecourant<=strin.max2)
+                        then {max1= strin.max1; 
+                                  max2= strin.max2; 
+                                  imax1= strin.imax1; 
+                                  imax2= strin.imax2; 
+                                  icourant= strin.icourant+1}
+                        else  if ((ecourant>strin.max2) and (ecourant<=strin.max1))
+                                   then {max1= strin.max1; 
+                                                 max2= ecourant; 
+                                                 imax1= strin.imax1; 
+                                                 imax2= strin.icourant; 
+                                                 icourant= strin.icourant+1}
+                                   else --ecourant>max1
+                                              {max1= ecourant;
+                                                   max2= strin.max1; 
+                                                   imax1= strin.icourant;
+                                                   imax2= strin.imax1; 
+                                                   icourant= strin.icourant+1};
+tel
+
+
+node fill_bool(s_in : struct_fill_bool) returns (s_out : struct_fill_bool ; elt : bool);
+let
+  s_out = {imax1= s_in.imax1; 
+  imax2= s_in.imax2; 
+  icourant= s_in.icourant+1};
+  elt = (s_in.icourant = s_in.imax1) or (s_in.icourant = s_in.imax2);
+tel
+
+
+node calculs_max(A : int_arrays) returns (res : bool_arrays);
+var
+     local_struct: struct_max;
+	tmp: struct_fill_bool;
+let
+        local_struct = red<<max;taille>>({max1= 0; 
+                                          max2= 0; 
+                                          imax1= -1; 
+                                          imax2= -1; 
+                                          icourant= 0},
+                                          A);
+        tmp, res = fill<<fill_bool;taille>>({imax1= local_struct.imax1; 
+                                imax2= local_struct.imax2; 
+                                icourant= 0});
+tel
+----
+
+
diff --git a/src/test/should_work/lionel/deSimone.lus b/src/test/should_work/lionel/deSimone.lus
new file mode 100644
index 00000000..f97f8ddd
--- /dev/null
+++ b/src/test/should_work/lionel/deSimone.lus
@@ -0,0 +1,157 @@
+-----------------------------------------------
+-- Bus arbiter (de Simone's version)
+-- Syntax for Ludic
+--             Author : Lionel Morel
+--             Started : June 18th 2002
+--             Last Updated : August 20th 2002
+------------------------------------------------
+
+const size = 10;
+
+type cell_accu = {
+     token : bool;
+     grant : bool
+     };
+
+type tabType = bool^size;
+
+
+node oneCell(accu_in : cell_accu; 
+                         req : bool)
+        returns(accu_out : cell_accu;
+                        ackout : bool);
+let
+  ackout = (req and accu_in.token and accu_in.grant) and not (false -> pre(ackout));
+  accu_out = 
+    {
+      token = accu_in.token;
+      grant = not(req) and accu_in.grant
+    };
+tel
+
+
+
+node deSimone(new_token : bool ; request : tabType) 
+        returns (acknowledge : tabType);
+var accu_out : cell_accu;
+let
+        accu_out, acknowledge = map_red<<oneCell, size>>({token = new_token;
+                                                         grant = true}, 
+                                                         request);
+tel
+
+
+-- property 1 :
+-- forall i!=j : AG !(acki and ackj)
+node prop1(request : tabType) returns (ok : bool);
+var acknowledge : tabType;
+        nb_acknowledge : int;
+let
+        acknowledge = deSimone(request);
+        nb_acknowledge = red<<prop1_iter;size>>(0,acknowledge);
+        ok = nb_acknowledge<=1;
+tel
+
+
+node prop1_iter(accu_in : int; elt_in : bool) 
+        returns (accu_out : int);
+let
+        accu_out = accu_in + (if elt_in then 1 else 0);
+tel
+-- There should be a possibility of 
+-- writing the "ok" equation without using an integer
+-- to count number of 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- property 1_bis : 
+-- same but only using booleans
+-- no more integers
+--node prop1_bis(request : bool^size) returns (ok : bool);
+--var acknowledge : bool^size;
+--let
+--      acknowledge = deSimone(request);
+--      ok = atMostOne(acknowledge);
+--tel
+
+
+-- at Most one element of an array of booleans is true
+--type atMost_struct = {hasBeen0 : bool,
+--                                        hasBeen1 : bool,
+--                                        hasBeen2 : bool,
+--                                        atMost1 : bool};
+
+
+--node atMostOne(tab : bool^size)
+--      returns (ok : bool);
+--var accu_out : atMost_struct;
+--let
+
+--      accu_out = red<<atMostOne_iter;size>>({hasBeen0 : true,
+--                                                                                 hasBeen1 : false,
+--                                                                                 hasBeen2 : false,
+--                                                                                 atMost1 : true},
+--                                                                                tab);
+--
+--      ok = accu_out.atMost1;
+--tel
+
+
+
+--node atMostOne_iter(accu_in : atMost_struct;
+--                elt_in : bool)
+--      returns (accu_out : atMost_struct);
+--let
+--      accu_out = {hasBeen0 : accu_in.hasBeen0, 
+--                              hasBeen1 : accu_in.hasBeen1 or 
+--                                                 (accu_in.hasBeen0 
+--                                                      and elt_in),
+--                              hasBeen2 : accu_in.hasBeen2 or 
+--                                                 (accu_in.hasBeen1 
+--                                                      and elt_in),
+--                              atMost1 : not(accu_in.hasBeen2 or 
+--                                                 (accu_in.hasBeen1 
+--                                                      and elt_in))};
+--tel
+
+
+
+
+-- property 2 : 
+-- forall i : AG AF(reqi => acki)
+-- traduisible en lustre ? 
+--property 3 :
+-- forall i : AG (acki => reqi)
+--node prop2(request : bool^size)
+--      returns(ok : bool);
+--var
+--      acknowledge : bool^size;
+--let
+--      acknowledge = deSimone(request);
+--      ok = red<<iter_impl;size>>(true,acknowledge,request);
+--tel
+--node iter_impl(accu_in : bool; req, ack : bool)
+--      returns (accu_out : bool);
+--let
+--      accu_out = implies(req,ack) and accu_in;
+--tel
+--node implies(a,b : bool) returns (c : bool);
+--let
+--      c = not(a) or b;
+--tel
+
+
+
+----
diff --git a/src/test/should_work/lionel/iterFibo.lus b/src/test/should_work/lionel/iterFibo.lus
new file mode 100644
index 00000000..c402d88c
--- /dev/null
+++ b/src/test/should_work/lionel/iterFibo.lus
@@ -0,0 +1,15 @@
+type T_fibo = int^2;
+
+node fibo(accu_in : T_fibo) returns (accu_out : T_fibo; elt : int);
+let
+  accu_out = [accu_in[0]+accu_in[1], accu_in[0]];
+  elt = accu_in[0]+accu_in[1];
+tel
+
+
+
+node iterFibo(x,y : int) returns (T : int^10);
+	var bidon : int^2;
+let
+  bidon, T = fill<<fibo;10>>([x,y]);
+tel
diff --git a/src/test/should_work/lionel/mapiter.lus b/src/test/should_work/lionel/mapiter.lus
new file mode 100644
index 00000000..9106979f
--- /dev/null
+++ b/src/test/should_work/lionel/mapiter.lus
@@ -0,0 +1,72 @@
+/**********************************************
+ *  - Exemples d´utilisation des opérateurs 
+ *     prédéfinis dans les itérateurs.     
+ *     ------------------------------ 
+ *********************************************/
+
+
+/*===========================================================*/
+/**  déclarations de constantes **/
+/**=============================**/
+const L = 2;
+const H = 3;
+
+/*===========================================================*/
+/**    déclarations de types    **/
+/**=============================**/
+type 
+  Reg_L = bool^L;
+  T_Reg_H = Reg_L^H;
+
+/*===========================================================*/
+/**  déclarations d´opérateurs  **/
+/**=============================**/
+
+-- 
+---------------------
+node initmat( iacc : bool ) returns ( sacc : bool; R :  T_Reg_H );
+let
+      ( sacc, R ) = fill<< fill<< bitalt ; L >> ; H >>( iacc);
+tel
+
+node bitalt(in: bool; ) returns (sacc, out: bool);
+let 
+  sacc = not in;
+  out = in; 
+tel  
+
+-- calcule la matrice (L, H) des "xor" des entrées:   
+---------------------------------------------------
+node composemat ( i1, i2 : T_Reg_H ) returns ( s1 : T_Reg_H );
+let
+       s1 = map<< map<< = ,  L>> ,  H>>( i1, i2 );
+tel
+
+-- compte le nombre de case a vrai
+-------------------------------------
+node reducemat(iacc : int; I: T_Reg_H ) returns (res : int);
+let 
+  res = red<< red <<incr; L >>,  H >>(iacc,  I);
+tel
+
+node incr(init: int; b: bool) returns (res : int);
+let 
+  res = if(b = true) then init+1 else init;
+tel
+
+
+-- noeud principale 
+-------------------
+node mapiter( a: bool ) returns ( nbTrue: int);
+var 
+   bid1, bid2 : bool ;
+   init1, init2 : T_Reg_H ;
+   XORMAT : T_Reg_H ; 
+
+let 
+    bid1, init1 = initmat(a);
+    bid2, init2 = initmat(not a);
+    XORMAT = composemat(init1, init2);
+    nbTrue = reducemat(0, XORMAT);
+tel
+
diff --git a/src/test/should_work/lionel/matrice.lus b/src/test/should_work/lionel/matrice.lus
new file mode 100644
index 00000000..f9e0df35
--- /dev/null
+++ b/src/test/should_work/lionel/matrice.lus
@@ -0,0 +1,20 @@
+const n = 2 ;
+const m = 3 ;
+
+type T_fibo = int^2;
+
+node fibo(accu_in : T_fibo) returns (accu_out : T_fibo; elt : int);
+let
+  accu_out = [accu_in[0]+accu_in[1], accu_in[0]];
+  elt = accu_in[0]+accu_in[1];
+tel
+
+node matrice ( a : int ) returns ( sum: int; bid: T_fibo; T: int^m^n); 
+let 
+	bid, T = fill << fill << fibo ; m >> ; n >> ([a, a]);	
+	sum = red << red << + ; m >> ; n >> (0, T ); 
+tel
+
+
+
+
diff --git a/src/test/should_work/lionel/matrice2.lus b/src/test/should_work/lionel/matrice2.lus
new file mode 100644
index 00000000..0a39772e
--- /dev/null
+++ b/src/test/should_work/lionel/matrice2.lus
@@ -0,0 +1,9 @@
+const n = 2 ;
+const m = 2 ;
+
+node matrice2 ( a : int ) returns ( res : int );
+let 
+	res = red << red << +,  m >>,  n >> (0, 1^m^n ); 
+tel
+
+
diff --git a/src/test/should_work/lionel/minus.lus b/src/test/should_work/lionel/minus.lus
new file mode 100644
index 00000000..7b8ac71d
--- /dev/null
+++ b/src/test/should_work/lionel/minus.lus
@@ -0,0 +1,17 @@
+const n = 3;
+const m = 2;
+
+node minus(a, b, c: bool^n^m) returns (r: bool; T1, T2: bool^n^m);
+var 
+  bid : bool;
+let
+  T1 = map<< map<< if,  n >>,  m >>(a, b, c);
+  bid, T2 = fill<< fill<< bitalt,  n>>,  m>>(a[0][0]);
+  r = red<< red<< xor,  n>>,  m>>(a[0][0], T1);
+tel
+
+node bitalt(a: bool) returns (out, b: bool);
+let
+  b = a;
+  out = not(a);
+tel
diff --git a/src/test/should_work/lionel/moyenne.lus b/src/test/should_work/lionel/moyenne.lus
new file mode 100644
index 00000000..168c8995
--- /dev/null
+++ b/src/test/should_work/lionel/moyenne.lus
@@ -0,0 +1,39 @@
+------------------------------------------------
+-- Une moyenne incrementale,  version pour ludic
+-- Incremental mean, version for ludic debugger
+--             Author : L.Morel
+--             Last Update :  Aug 20th 2002
+------------------------------------------------
+
+
+const size=10;
+
+type moyenne_accu = {sum :  real;
+                     moyenne : real;
+                     rank : real};
+
+node moyenne_step(accu_in : moyenne_accu; elt_in : real) returns (accu_out : moyenne_accu);
+let
+  accu_out = {
+    sum = accu_in.sum + elt_in;
+    moyenne = (accu_in.sum + elt_in)/(accu_in.rank+1.0);
+    rank = accu_in.rank+1.0
+};
+
+tel
+
+
+
+
+
+node moyenne(Tab : real^size)
+     returns (moy : real);
+var accu_out : moyenne_accu;
+let
+   accu_out = red<<moyenne_step, size>>({sum = 0.0;
+                                        moyenne = 0.0;
+                                        rank = 0.0}, 
+                                       Tab);
+   moy = accu_out.moyenne;
+tel
+----
diff --git a/src/test/should_work/lionel/normal.lus b/src/test/should_work/lionel/normal.lus
new file mode 100644
index 00000000..9ea42ade
--- /dev/null
+++ b/src/test/should_work/lionel/normal.lus
@@ -0,0 +1,528 @@
+--------------------------------------------------------------
+--| Lionel MOREL                                               |
+--| Doctorant                                                  |
+--| Laboratoire Verimag -- Equipe Synchrone                    |
+--|  http://www-verimag.imag.fr/~lmorel/                       |
+--------------------------------------------------------------
+--|  Verimag, Centre Equation       | tel (33/0) 4 56 52 03 73 |
+--| 2, Av de Vignate, 38610 Gières  | fax (33/0) 4 56 52 03 50 |
+--------------------------------------------------------------
+--| http://titchkara.free.fr                                   |
+--------------------------------------------------------------
+----
+
+
+-- Etude de cas ELMU
+-- Maquette du noeud Normal
+-- Version Originale :  P.Raymond - Mai 2002
+-- Version "courante" : L.Morel - Novembre 2002
+
+
+------------------------------------------
+-- Constantes
+------------------------------------------
+const NBC = 20;
+const NBG = 4;
+--pour remplace le type enumere T_EtatCharge
+const EC_ON = 0;
+const EC_OFF = 1;
+const EC_NON_CTRL = 2;
+const EC_LESTAGE = 3;
+const EC_DELESTAGE = 4;
+-- pour T_ComChg
+const COM_ERR = 0;
+const COM_ON = 1;
+const COM_OFF = 2;
+
+
+
+
+
+
+
+----------------------------------------
+--Types :
+------------------------------------------
+--Ils sont tres abstraits,
+--on ne s'interesse pas a la fonctionnalite
+--mais juste a la structure generale en
+--iterateurs.
+--Dans les donnees ``globales'' on n'utilise
+--que l'info chg2gen, pour illustrer le 
+--principe de selection/fusion, les autres
+--donnees sont purement decoratives.
+-----------------------------------------
+-- Lionel : j'ai remplace les types
+-- enumeres par des entiers....
+type INTNBC = int^NBC;
+type INTNBG = int^NBG;
+
+type T_EntreeGlob = {
+        chg2gen      : INTNBC;  -- ch2gen[i] est le Numero du generateur sur lequel 
+                            -- la charge i est branchee (correspondance charge/generateur)
+        mesure_chgs  : INTNBC;  -- Les charges qu'on a
+        mesure_gens  : INTNBG}; -- Les generateurs
+
+type T_InfoChgIndiv = {
+        mesure_chg : int};
+
+type T_InfoChgGlob = {
+        chg2gen : INTNBC};
+
+--type T_EtatCharge = enum {
+--      EC_ON, EC_OFF, EC_NON_CTRL, EC_LESTAGE, EC_DELESTAGE};
+type T_EtatCharge = int;
+
+type T_InfoGenIndiv = {
+        mesure_gen : int};
+
+type T_InfoGenGlob = {
+    elt_bidon : int; 
+        chg2gen : INTNBC};
+
+--type T_ComChg = enum {
+--      COM_ERR, COM_ON, COM_OFF};
+type T_ComChg = int;
+
+
+
+
+
+----------------------------------------
+-- Utilitaires
+----------------------------------------
+-- "copie" d'un tableau a l'identite
+node id(elt_in : int) returns (elt_out : int); 
+let
+   elt_out = elt_in;
+tel
+-- remplissage d'un tableau avec 0, 1, 2, ...
+node incr_acc( acc_in : int) returns ( acc_out: int; res : int);
+let
+        res = acc_in;
+        acc_out = res + 1;
+tel
+
+
+
+
+
+-------------------------------------------------
+-- Extraction des infos globales pour traiter_chg
+-------------------------------------------------
+node extract_info_chg_glob ( EntreeGlob : T_EntreeGlob)  
+        returns (InfoChgGlob : T_InfoChgGlob);
+let
+        InfoChgGlob = {chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+tel
+
+
+
+
+
+
+
+
+
+------------------------------------------------------
+-- Extraction des infos individuelles pour traiter_chg
+------------------------------------------------------
+node int2InfoChgIndiv (m : int) 
+        returns (InfoChgIndiv : T_InfoChgIndiv);
+let
+        InfoChgIndiv = { mesure_chg = m };
+tel
+
+node extract_tab_info_chg_indiv (EntreeGlob : T_EntreeGlob) 
+        returns (TabInfoChgIndiv : T_InfoChgIndiv^NBC);
+let
+        TabInfoChgIndiv = map<<int2InfoChgIndiv; NBC>>(EntreeGlob.mesure_chgs);
+tel
+
+
+
+
+
+
+
+
+-------------------------------------------------
+-- Extraction des infos globales pour traiter_gen
+-------------------------------------------------
+node extract_info_gen_glob (EntreeGlob : T_EntreeGlob) 
+        returns (InfoGenGlob : T_InfoGenGlob);
+let
+        InfoGenGlob = {elt_bidon = 0; chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+tel
+
+
+
+------------------------------------------------------
+-- Extraction des infos individuelles pour traiter_gen
+------------------------------------------------------
+node int2InfoGenIndiv (m : int) 
+        returns (InfoGenIndiv : T_InfoGenIndiv);
+let
+        InfoGenIndiv = {mesure_gen = m};
+tel
+
+node extract_tab_info_gen_indiv (EntreeGlob : T_EntreeGlob) 
+        returns (TabInfoGenIndiv : T_InfoGenIndiv^NBG);
+let
+        TabInfoGenIndiv = map<<int2InfoGenIndiv; NBG>>(EntreeGlob.mesure_gens);
+tel
+
+
+
+
+
+
+
+
+
+
+
+---------------------------------------------------
+--Fusion : c'est un red de fusion_tab_com,
+--qui est lui-meme un map de  fusion_une_com
+---------------------------------------------------
+-- accessoire : prendre (ou non) une ComChg
+node fusion_une_com (in_com  : T_ComChg ;  
+                                         cur_com : T_ComChg ;
+                                         cur_val : bool) 
+        returns (out_com : T_ComChg);
+let
+        out_com = if (cur_val) then cur_com else in_com ;
+tel
+
+-- accessoire : completer un tableau de ComChg modulo un tableau de bool
+node fusion_tab_com (acc_in : T_ComChg^NBC; 
+                                         TabCom : T_ComChg^NBC;
+                                         TabVal : bool^NBC) 
+        returns (acc_out : T_ComChg^NBC);
+let
+        acc_out = map<<fusion_une_com; NBC>>( acc_in, TabCom, TabVal);
+tel
+
+-- Le VRAI noeud de fusion
+node fusion_com (AllTabComChg : T_ComChg^NBC^NBG ;  -- STEP ERROR :  INTERPRETATION 1
+                                 AllTabComVal : bool^NBC^NBG) 
+        returns (TabComChg : T_ComChg^NBC);
+var
+        Vide  : T_ComChg^NBC ;
+let
+        Vide = (COM_ERR)^NBC;
+        TabComChg = red<<fusion_tab_com; NBG>>(Vide,            --acc d'entree
+                                                                                   AllTabComChg,
+                                                                                   AllTabComVal);       
+tel
+
+
+
+
+------------------------------------------------------
+--Maquette du noeud traite_chg :
+--   on fait abstraction de la fonctionnalite
+----------------------------------------------------
+node trChItere(acc_in : int; elt : int) returns (acc_out : int);  
+-- Pour l'instant,  calcul du max
+let
+  acc_out = if(acc_in>elt) then acc_in else elt;
+tel
+
+node traite_charge(InfoChgIndiv : T_InfoChgIndiv; -- un entier 
+                                           InfoChgGlob   : T_InfoChgGlob)-- un tableau de NBC entier
+        returns (EtatCharge : T_EtatCharge);-- un entier
+-- Pour l'instant, determine le max
+-- plus grand que InfoChgIndiv.mesure_chg
+let
+  EtatCharge = red<<trChItere;NBC>>(InfoChgIndiv.mesure_chg, 
+                                    InfoChgGlob.chg2gen);
+  -- EtatCharge contient le maximum des elements de InfoChgGlob.chg2gen 
+  -- qui sont plus grands que InfoChgIndiv.mesure_chg
+tel
+
+
+
+
+
+
+
+
+
+----------------------------------------------------
+--Maquette du noeud traite_gen :
+--  On a juste mis le calcul du TabComVal,
+--   le reste etant realise par un ``noeud'' abstrait
+----------------------------------------------------
+node traite_genCore_itere(acc_in : int; elt1 : bool; elt2 : int) returns (acc_out : int; elt : int); 
+let
+  elt = if(elt1)
+        then elt2
+        else acc_in;
+  acc_out = acc_in;
+tel
+
+node traite_gen_core (indice_gen : int ; 
+                      InfoGenIndiv  : T_InfoGenIndiv ;
+                      InfoGenGlob    : T_InfoGenGlob ;
+                      TabEtatCharge : T_EtatCharge^NBC;
+                      TabComVal     : bool^NBC) 
+        returns (TabComChg  : T_ComChg^NBC);
+var bidon : int;
+let
+   bidon, TabComChg = map_red<<traite_genCore_itere;NBC>>(indice_gen, TabComVal, InfoGenGlob.chg2gen);
+tel
+
+
+
+
+node egal_indice(indice, val : int) returns (r : bool);
+let 
+  r = val = indice; 
+tel
+
+
+-- Le noeud suivant ne passe pas encore dans ludic
+-- message :  "Dataflow : null"
+node traite_gen (indice_gen : int ;
+                 InfoGenIndiv  : T_InfoGenIndiv ;
+                 InfoGenGlob    : T_InfoGenGlob ;
+  --TabComVal_bbis : bool^NBC;
+                 TabEtatCharge : T_EtatCharge^NBC)
+        returns (TabComChg  : T_ComChg^NBC ;
+                 TabComVal  : bool^NBC);
+var TabComVal_bis : bool^NBC;
+    TabIndiceGen : int^NBC;
+    bid :int;
+let
+  TabComVal_bis = map<<egal_indice;NBC>>(TabIndiceGen, 
+                                        InfoGenGlob.chg2gen);
+
+  bid, TabIndiceGen = fill<<copie;NBC>>(indice_gen);
+
+  TabComChg = traite_gen_core(
+                              indice_gen,
+                              InfoGenIndiv,
+                              InfoGenGlob, --.chg2gen,
+                              TabEtatCharge,
+                              TabComVal_bis);
+
+  TabComVal = map<<egal_indice;NBC>>(TabIndiceGen, 
+                                     InfoGenGlob.chg2gen);
+tel                          
+         
+
+
+node traite_gen_bis(a : int;
+                    c : T_InfoGenGlob)
+    returns (e : bool^NBC);
+var loc_a : int^NBC;
+    bid:int;
+let
+    bid, loc_a = fill<<copie, NBC>>(a);
+
+    e =  map<<egal_indice, NBC>>(loc_a, 
+                                c.chg2gen);
+tel
+
+
+
+
+node copie(acc_in : int) 
+     returns (acc_out : int; elt : int);
+let
+   acc_out = acc_in;
+   elt = acc_in;
+tel
+
+----------------------------
+-- Un essai pour debugger --
+----------------------------
+--node essai_taite_gen(indice_gen : int^NBC;
+--                     infoGenGlob : T_InfoGenGlob) 
+--     returns (TabComVal  : bool^NBC);
+--let
+--    TabComVal = map<<egal_indice;NBC>>(indice_gen,
+--                                       infoGenGlob.chg2gen);
+--tel
+
+node essai_traite_gen(indice_gen : int;
+            infoGenGlob : T_InfoGenGlob) 
+     returns (TabComVal  : bool^NBC);
+var Tab_indiceGen : int^NBC;
+	bid : int;
+let
+  bid, Tab_indiceGen = fill<<copie;NBC>>(indice_gen);
+
+  TabComVal = map<<egal_indice;NBC>>(Tab_indiceGen,
+                                     infoGenGlob.chg2gen);
+tel
+
+----------------------------
+node essai2(a : int^NBC;
+            d : T_InfoGenGlob) 
+     returns (c  : bool^NBC);
+let
+  c = map<<egal_indice;NBC>>(a,
+                             d.chg2gen);
+tel
+
+----------------------------
+node essai3(indice : int^NBC;
+            info : T_InfoGenGlob) 
+     returns (Connerie  : bool^NBC);
+let
+  Connerie = map<<egal_indice;NBC>>(indice,
+                             info.chg2gen);
+tel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-------------------------------------------------------------------
+-- extraction des charges a partir des Entrees globales
+-------------------------------------------------------------------
+node extrCharge(EntreeGlob : T_EntreeGlob) 
+     returns (TabInfoChgIndiv : T_InfoChgIndiv^NBC;
+              TabInfoChgGlob   : T_InfoChgGlob^NBC);
+let
+--extraction du tableau des infos individuelles de charge
+    -- Ext
+        TabInfoChgIndiv = extract_tab_info_chg_indiv(EntreeGlob); 
+    -- TabInfoChgIndiv[i] contient les infos seulement les infos concernant la charge i
+
+        --extraction et dispatch des infos globales
+    -- ExtDis
+        TabInfoChgGlob = extract_info_chg_glob(EntreeGlob)^NBC; 
+    -- TabInfoChgGlob[i] contient le chg2gen[i] des entrees globales.
+tel
+
+
+
+
+
+
+
+-------------------------------------------------------------------
+-- extraction des generateurs a partir des Entrees globales
+-------------------------------------------------------------------
+node extrGen(EntreeGlob : T_EntreeGlob)
+     returns (TabInfoGenIndiv : T_InfoGenIndiv^NBG;
+              TabInfoGenGlob   : T_InfoGenGlob^NBG;
+              TabIndiceGen  : INTNBG;);
+var bid:int;
+let
+        --extraction du tableau des infos individuelles de generateur
+        TabInfoGenIndiv = extract_tab_info_gen_indiv( EntreeGlob );
+
+        --extraction et dispatch des infos globales
+        TabInfoGenGlob = extract_info_gen_glob( EntreeGlob )^NBG; 
+
+        --tableaux des indices de gen
+        bid, TabIndiceGen = fill<<incr_acc; NBG>>(0);
+tel
+
+
+
+
+
+
+
+-----------------------------------------------------------------
+-- Traitement Global des charges                                 
+-----------------------------------------------------------------
+node traiteChg(TabInfoChgIndiv : T_InfoChgIndiv^NBC; -- tableau de NBC entiers
+               TabInfoChgGlob : T_InfoChgGlob^NBC) -- tableau de NBC*NBC entiers
+     returns (TabEtatCharge : T_EtatCharge^NBC);-- tableau de NBC entiers
+let
+  TabEtatCharge = map<<traite_charge; NBC>>(
+                                            TabInfoChgIndiv,
+                                            TabInfoChgGlob
+                                            );
+    --Compare le i-eme element de TabInfoChgIndiv avec le max de la 
+    -- i-eme colonne de TabInfoChgGlob
+tel
+
+
+
+
+
+
+-------------------------------------------------------------------
+-- Traitement Global des generateurs                               
+-------------------------------------------------------------------
+node traiteGen(TabIndiceGen  : INTNBG;
+               TabInfoGenIndiv : T_InfoGenIndiv^NBG;
+               TabInfoGenGlob   : T_InfoGenGlob^NBG;
+               TabEtatCharge : T_EtatCharge^NBC)
+     returns (AllTabComChg  : T_ComChg^NBC^NBG;
+              AllTabComVal  : bool^NBC^NBG);
+let
+  AllTabComChg, AllTabComVal = map<<traite_gen; NBG>> (TabIndiceGen,
+                                                       TabInfoGenIndiv,
+                                                       TabInfoGenGlob,
+                                                       TabEtatCharge^NBG);
+tel
+        
+
+
+
+
+
+
+        
+-------------------------------------------------------
+-- Noeud principal                                     
+-------------------------------------------------------
+node normal(EntreeGlob : T_EntreeGlob) --Contient (au moins) les valeurs des charges et des generateurs du systeme
+        returns (TabComChg : T_ComChg^NBC);
+var
+        TabInfoChgIndiv : T_InfoChgIndiv^NBC;
+        TabInfoChgGlob   : T_InfoChgGlob^NBC;
+        TabEtatCharge   : T_EtatCharge^NBC;
+
+        TabInfoGenIndiv : T_InfoGenIndiv^NBG;
+        TabInfoGenGlob   : T_InfoGenGlob^NBG;
+
+        TabIndiceGen  : INTNBG;
+
+        AllTabComChg  : T_ComChg^NBC^NBG;
+        AllTabComVal  : bool^NBC^NBG;
+let
+
+-- Les 2 boites de gauche
+  TabInfoChgIndiv, TabInfoChgGlob = extrCharge(EntreeGlob);
+
+
+--traitement des charges
+   TabEtatCharge = traiteChg(TabInfoChgIndiv, TabInfoChgGlob);
+
+-- Les 4 boites au milieu a droite
+    TabInfoGenIndiv, TabInfoGenGlob, TabIndiceGen = extrGen(EntreeGlob);
+    
+
+ --traitement des generateurs
+    AllTabComChg, AllTabComVal = traiteGen(TabIndiceGen,
+                                                                                   TabInfoGenIndiv,
+                                                                                   TabInfoGenGlob,
+                                                                                   TabEtatCharge);
+
+
+-- Le calcul "Fus" tout a droite
+        TabComChg = fusion_com(AllTabComChg, AllTabComVal);
+
+tel
+----
+
+
diff --git a/src/test/should_work/lionel/pipeline.lus b/src/test/should_work/lionel/pipeline.lus
new file mode 100644
index 00000000..7d4c813c
--- /dev/null
+++ b/src/test/should_work/lionel/pipeline.lus
@@ -0,0 +1,34 @@
+---------------------------
+-- A pipelining algorithm
+-- inspired from 7.1 in holenderski's paper
+-- "compositional verif of synchronous networks"
+--------------------------
+--
+-- Author : L. Morel
+-- started on : July 1st 2002
+-- last update : July 1st 2002
+
+
+const size = 10;
+
+
+node oneStep_pipe(accu_in : bool; elt_in :  bool)
+     returns (accu_out :  bool;
+              elt_out :  bool);
+let
+  elt_out = true->pre(not(accu_in));  -- at rank 'i+1' accu_in contains tab[i-1] and elt_in contains tab[i]
+  accu_out = elt_in;
+tel
+
+
+
+node pipeline(in :  bool^size) 
+     returns(out :  bool^size);
+var accu_out : bool;
+        --var_inter : bool;
+let
+   accu_out, out = map_red<<oneStep_pipe;size>>(true->pre(accu_out), in);
+--      var_inter = true -> pre(accu_out);
+--      accu_out, out = map_red<<oneStep_pipe;size>>(var_inter, in);
+tel
+----
diff --git a/src/test/should_work/lionel/predefOp.lus b/src/test/should_work/lionel/predefOp.lus
new file mode 100644
index 00000000..29a19bac
--- /dev/null
+++ b/src/test/should_work/lionel/predefOp.lus
@@ -0,0 +1,118 @@
+/**********************************************
+ *  - Exemples d´utilisation des opérateurs 
+ *     prédéfinis dans les itérateurs.     
+ *     ------------------------------ 
+ *********************************************/
+
+
+/*===========================================================*/
+/**  déclarations de constantes **/
+/**=============================**/
+const L = 2;
+const H = 3;
+
+/*===========================================================*/
+/**    déclarations de types    **/
+/**=============================**/
+type 
+  Reg_L = bool^L;       -- tableau de booléen
+  T_Reg_H = Reg_L^H;    -- matrice de booléen
+  Tab_L = int^L;        -- tableau d´entier
+  T_Tab_H = Tab_L^H;    -- matrice d´entier
+
+/*===========================================================*/
+/**  déclarations d´opérateurs  **/
+/**=============================**/
+
+--  initialise une matrice de booleen:  
+-------------------------------------
+node initmatbool( iacc : bool ) returns ( sacc : bool; R :  T_Reg_H );
+let
+      ( sacc, R ) = fill<< fill<< bitalt ; L >> ; H >>( iacc );
+tel
+
+node bitalt ( iacc : bool) returns (oacc: bool ; res : bool);
+let 
+  res = iacc;
+  oacc = not(res);
+tel
+
+--  initialise une matrice d´entier 0, 1, 2...:  
+-------------------------------------
+node initmatint( iacc : int ) returns ( sacc : int; R :  T_Tab_H );
+let
+      ( sacc, R ) = fill<< fill<< incremental ; L >> ; H >>( iacc );
+tel
+
+node incremental ( iacc : int ) returns ( oacc: int ; res : int );
+let 
+  res = iacc;
+  oacc = res + 1;
+tel
+
+
+-- calcule la matrice (L, H) des "xor" des entrées:   
+---------------------------------------------------
+node composematbool ( i1, i2 : T_Reg_H ) returns ( s1 : T_Reg_H );
+let
+       --s1 = map<< map<< xor ; L>> ; H>>( i1, i2 );
+       --s1 = map<< map<< and ; L>> ; H>>( i1, i2 );
+       --s1 = map<< map<< or ; L>> ; H>>( i1, i2 );
+       s1 = map<< map<< =>,  L>>,  H>>( i1, i2 );
+tel
+
+-- calcule arithmethique sur les entrées:   
+---------------------------------------------------
+node composematint ( i1, i2 : T_Tab_H ) returns ( s1 : T_Tab_H; s2 : T_Reg_H );
+let
+       --s1 = map<< map<< + ; L>> ; H>>( i1, i2 );
+       --s1 = map<< map<< - ; L>> ; H>>( i1, i2 );
+       --s1 = map<< map<< div ; L>> ; H>>( i1, i2 );
+       s1 = map<< map<< / ,  L>> ,  H>>( i1, i2 );
+       s2 = map<< map<< >= ,  L>> ,  H>>( i1, i2 );
+tel
+
+-- compte le nombre de case a vrai dans une matrice: 
+---------------------------------------------------
+node reducematbool(iacc : int; I: T_Reg_H ) returns (res : int);
+let 
+  res = red<< red <<incr, L >>,  H >>(iacc, I);
+tel
+
+node incr(init: int; b: bool) returns (res : int);
+let 
+  res = if(b = true) then init+1 else init;
+tel
+
+-- somme des éléments d´une matrice: 
+---------------------------------------------------
+node reducematint(iacc : int; I: T_Tab_H ) returns (res : int);
+let 
+  res = red<< red << + ; L >> ; H >>(iacc, I);
+tel
+
+-- noeud principale 
+-------------------
+node predefOp2( a: bool ) returns ( nbTrue: int ;   init1, init2 : T_Reg_H ;  XORMAT : T_Reg_H );
+var 
+   bid1, bid2 : bool;
+let 
+    bid1, init1 = initmatbool(a);
+    bid2, init2 = initmatbool(not a);
+    XORMAT = composematbool(init1, init2);
+    nbTrue = reducematbool(0, XORMAT);
+
+tel
+
+
+node predefOp( a: int ) returns ( res: int ;   init1, init2, matres1 : T_Tab_H ;  matres2 : T_Reg_H ;);
+var 
+   bid1, bid2 : int;
+let 
+     bid1, init1 = initmatint(a);
+     bid2, init2 = initmatint(a*a);
+     matres1, matres2 = composematint(init1, init2);
+     res = reducematint(0, matres1);
+tel
+
+
diff --git a/src/test/should_work/lionel/redIf.lus b/src/test/should_work/lionel/redIf.lus
new file mode 100644
index 00000000..665140a4
--- /dev/null
+++ b/src/test/should_work/lionel/redIf.lus
@@ -0,0 +1,11 @@
+node redIf(a : bool; b, c : bool^3) returns (r : bool);
+let
+  r = red<<if, 3>>(a,b,c);
+--    r = red<<monIf, 3>>(a,b,c);
+tel
+
+
+node monIf(a,b,c : bool) returns (r : bool);
+let
+  r = if(a) then b else c;
+tel
diff --git a/src/test/should_work/lionel/simpleRed.lus b/src/test/should_work/lionel/simpleRed.lus
new file mode 100644
index 00000000..d3710aef
--- /dev/null
+++ b/src/test/should_work/lionel/simpleRed.lus
@@ -0,0 +1,7 @@
+const n = 2 ;
+const m = 3 ;
+
+node simpleRed ( a : int ) returns ( res : int );
+let 
+	res = red << +,  m >> (0 , a^m ); 
+tel
\ No newline at end of file
diff --git a/src/test/should_work/lionel/test.exp b/src/test/should_work/lionel/test.exp
new file mode 100644
index 00000000..18358370
--- /dev/null
+++ b/src/test/should_work/lionel/test.exp
@@ -0,0 +1,11 @@
+arrays calculs_max deSimone FillFollowedByRed Gyroscope iterFibo mapiter Error : at `map' in file `mapiter.lus' (l.42/c.13)  : 
+	found     (bool^2^3,bool^2^3)
+	required  ('a^2^3,'a^2^3)
+1 Type(s) error(s) found ...
+matrice2 matrice minus Error : at `map' in file `minus.lus' (l.8/c.8)  : 
+	found     (bool^3^2,bool^3^2,bool^3^2)
+	required  (bool^3^2,'a^3^2,'a^3^2)
+1 Type(s) error(s) found ...
+moyenne normal pipeline predefOp redIf Error : at `red' in file `redIf.lus' (l.3/c.7)  : first input and outpout of operator argument must be of same type
+1 Type(s) error(s) found ...
+simpleRed testSilus triSel 
\ No newline at end of file
diff --git a/src/test/should_work/lionel/testSilus.lus b/src/test/should_work/lionel/testSilus.lus
new file mode 100644
index 00000000..7c40557b
--- /dev/null
+++ b/src/test/should_work/lionel/testSilus.lus
@@ -0,0 +1,446 @@
+-- Etude de cas ELMU
+-- Maquette du noeud Normal
+-- Version Originale :  P.Raymond - Mai 2002
+-- Version "courante" : L.Morel - Novembre 2002
+
+
+------------------------------------------
+-- Constantes
+------------------------------------------
+const NBC = 20;
+const NBG = 4;
+--pour remplacer le type enumere T_EtatCharge
+const EC_ON = 0;
+const EC_OFF = 1;
+const EC_NON_CTRL = 2;
+const EC_LESTAGE = 3;
+const EC_DELESTAGE = 4;
+-- pour remplacer le type enumere T_ComChg
+const COM_ERR = 0;
+const COM_ON = 1;
+const COM_OFF = 2;
+
+
+
+
+
+
+
+----------------------------------------
+--Types :
+------------------------------------------
+--Ils sont tres abstraits,
+--on ne s'interesse pas a la fonctionnalite
+--mais juste a la structure generale en
+--iterateurs.
+--Dans les donnees ``globales'' on n'utilise
+--que l'info chg2gen, pour illustrer le 
+--principe de selection/fusion, les autres
+--donnees sont purement decoratives.
+-----------------------------------------
+-- Lionel : j'ai remplace les types
+-- enumeres par des entiers....
+type INTNBC = int^NBC;
+type BOOLNBC = bool^NBC;
+type INTNBG = int^NBG;
+
+type T_EntreeGlob = {
+	chg2gen      : INTNBC;  -- ch2gen[i] est le Numero du generateur sur lequel 
+                                -- la charge i est branchee (correspondance charge/generateur)
+	mesure_chgs  : INTNBC;  -- Les charges qu'on a
+	mesure_gens  : INTNBG}; -- Les generateurs
+
+type T_InfoChgIndiv = {
+	mesure_chg : int};
+
+type T_InfoChgGlob = {
+	chg2gen : INTNBC};
+
+--type T_EtatCharge = enum {
+--	EC_ON; EC_OFF; EC_NON_CTRL; EC_LESTAGE; EC_DELESTAGE};
+type T_EtatCharge = int;
+
+type T_InfoGenIndiv = {
+	mesure_gen : int};
+
+type T_InfoGenGlob = {
+    elt_bidon : int; 
+	chg2gen : INTNBC};
+
+--type T_ComChg = enum {
+--	COM_ERR; COM_ON; COM_OFF};
+type T_ComChg = int;
+type T_ComChgNBC = T_ComChg^NBC;
+
+
+
+
+----------------------------------------
+-- Utilitaires
+----------------------------------------
+-- "copie" d'un tableau a l'identite
+node id(elt_in : int) returns (elt_out : int);  -- OK
+let
+   elt_out = elt_in;
+tel
+-- remplissage d'un tableau avec 0; 1; 2; ...
+node incr_acc( acc_in : int) returns ( acc_out: int; res : int); -- OK
+let
+	res = acc_in;
+	acc_out = res + 1;
+tel
+
+
+
+
+
+-------------------------------------------------
+-- Extraction des infos globales pour traiter_chg
+-------------------------------------------------
+node extract_info_chg_glob (EntreeGlob : T_EntreeGlob)  
+	returns (InfoChgGlob : T_InfoChgGlob); -- OK
+let
+	InfoChgGlob = {chg2gen =  map<<id;NBC>>(EntreeGlob.chg2gen)};
+tel
+
+
+
+
+
+
+
+
+
+------------------------------------------------------
+-- Extraction des infos individuelles pour traiter_chg
+------------------------------------------------------
+node int2InfoChgIndiv (m : int) -- OK
+	returns (InfoChgIndiv : T_InfoChgIndiv);
+let
+	InfoChgIndiv = {mesure_chg = m};
+tel
+
+node extract_tab_info_chg_indiv (EntreeGlob : T_EntreeGlob) -- OK
+	returns (TabInfoChgIndiv : T_InfoChgIndiv^NBC); 
+let
+	TabInfoChgIndiv = map<<int2InfoChgIndiv; NBC>>(EntreeGlob.mesure_chgs);
+tel
+
+
+
+
+
+
+
+
+-------------------------------------------------
+-- Extraction des infos globales pour traiter_gen
+-------------------------------------------------
+node extract_info_gen_glob (EntreeGlob : T_EntreeGlob)  -- OK
+	returns (InfoGenGlob : T_InfoGenGlob);
+let
+	InfoGenGlob = {elt_bidon = 0;
+                   chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+tel
+
+
+
+------------------------------------------------------
+-- Extraction des infos individuelles pour traiter_gen
+------------------------------------------------------
+node int2InfoGenIndiv (m : int)   -- OK
+	returns (InfoGenIndiv : T_InfoGenIndiv);
+let
+	InfoGenIndiv = {mesure_gen = m};
+tel
+
+node extract_tab_info_gen_indiv (EntreeGlob : T_EntreeGlob)  -- OK
+	returns (TabInfoGenIndiv : T_InfoGenIndiv^NBG);
+let
+	TabInfoGenIndiv = map<<int2InfoGenIndiv; NBG>>(EntreeGlob.mesure_gens);
+tel
+
+
+
+
+
+
+
+
+
+
+
+---------------------------------------------------
+--Fusion : c'est un red de fusion_tab_com,
+--qui est lui-meme un map de  fusion_une_com
+---------------------------------------------------
+-- accessoire : prendre (ou non) une ComChg
+node fusion_une_com (in_com  : T_ComChg ;     --- OK 
+					 cur_com : T_ComChg ;
+					 cur_val : bool) 
+	returns (out_com : T_ComChg);
+let
+	out_com = if (cur_val) then cur_com else in_com ;
+tel
+
+-- accessoire : completer un tableau de ComChg modulo un tableau de bool
+node fusion_tab_com (acc_in : T_ComChg^NBC;    -- OK
+					 TabCom : T_ComChg^NBC;
+					 TabVal : bool^NBC) 
+	returns (acc_out : T_ComChg^NBC);
+let
+	acc_out = map<<fusion_une_com; NBC>>(acc_in, TabCom, TabVal);
+tel
+
+-- Le VRAI noeud de fusion
+node fusion_com (AllTabComChg : T_ComChgNBC^NBG ;    -- OK
+				 AllTabComVal : BOOLNBC^NBG) 
+	returns (TabComChg : T_ComChgNBC);
+ var
+	Vide  : T_ComChgNBC ;
+let
+	Vide = COM_ERR^NBC;
+	TabComChg = red<<fusion_tab_com; NBG>>(Vide,            --acc d'entree
+										   AllTabComChg,
+										   AllTabComVal);	
+tel
+
+
+------------------------------------------------------
+--Maquette du noeud traite_chg :
+--   on fait abstraction de la fonctionnalite
+----------------------------------------------------
+node trChItere(acc_in : int; elt : int) returns (acc_out : int);  -- OK
+-- Pour l'instant,  calcul du max
+let
+  acc_out = if(acc_in>elt) then acc_in else elt;
+tel
+
+node traite_charge(InfoChgIndiv : T_InfoChgIndiv; -- un entier                     --OK
+					   InfoChgGlob   : T_InfoChgGlob)-- un tableau de NBC entier
+	returns (EtatCharge : T_EtatCharge);-- un entier
+-- Pour l'instant, determine le max
+-- plus grand que InfoChgIndiv.mesure_chg
+let
+  EtatCharge = red<<trChItere;NBC>>(InfoChgIndiv.mesure_chg, 
+                                    InfoChgGlob.chg2gen);
+  -- EtatCharge contient le maximum des elements de InfoChgGlob.chg2gen 
+  -- qui sont plus grands que InfoChgIndiv.mesure_chg
+tel
+
+
+
+
+
+----------------------------------------------------
+--Maquette du noeud traite_gen :
+--  On a juste mis le calcul du TabComVal,
+--   le reste etant realise par un ``noeud'' abstrait
+----------------------------------------------------
+node traite_genCore_itere(acc_in : int;               -- OK
+                          elt1 : bool; 
+                          elt2 : int) 
+     returns (acc_out : int; elt : int); 
+let
+  elt = if(elt1)
+        then elt2
+        else acc_in;
+  acc_out = acc_in;
+tel
+
+node traite_gen_core (indice_gen : int ;                   -- OK
+                      InfoGenIndiv  : T_InfoGenIndiv ;
+                      InfoGenGlob    : T_InfoGenGlob ;
+                      TabEtatCharge : T_EtatCharge^NBC;
+                      TabComVal     : BOOLNBC) 
+	returns (TabComChg  : T_ComChg^NBC);
+var bidon : int;
+let
+   bidon, TabComChg = map_red<<traite_genCore_itere;NBC>>(indice_gen, TabComVal, InfoGenGlob.chg2gen);
+tel
+
+
+
+
+node egal_indice(indice, val : int) returns (r : bool);   -- OK
+let 
+  r = val = indice; 
+tel
+
+
+         
+
+
+node traite_gen(indice_gen : int ;                          -- OK
+                   InfoGenIndiv  : T_InfoGenIndiv ;
+                   InfoGenGlob    : T_InfoGenGlob ;
+                   TabEtatCharge : T_EtatCharge^NBC;
+                   --TabIndiceGen : int^NBC
+                   )
+returns (TabComChg  : T_ComChg^NBC;
+         TabComVal : BOOLNBC
+         );
+--var inter : int^NBC;
+var 
+	TabIndiceGen : int^NBC;
+	bidon : int;	
+let
+  TabComChg = traite_gen_core(indice_gen,
+                              InfoGenIndiv,
+                              InfoGenGlob,
+                              TabEtatCharge,
+                              TabComVal);
+  TabComVal = map<<egal_indice;NBC>>(TabIndiceGen, InfoGenGlob.chg2gen);
+  bidon, TabIndiceGen = fill<<copie;NBC>>(indice_gen);
+tel
+
+
+
+
+node copie(acc_in : int)                -- OK
+     returns (acc_out : int; elt : int);
+let
+   acc_out = acc_in;
+   elt = acc_in;
+tel
+
+
+
+
+
+
+-------------------------------------------------------------------
+-- extraction des charges a partir des Entrees globales
+-------------------------------------------------------------------
+node extrCharge(EntreeGlob : T_EntreeGlob)                -- OK
+     returns (TabInfoChgIndiv : T_InfoChgIndiv^NBC;
+              TabInfoChgGlob   : T_InfoChgGlob^NBC);
+let
+--extraction du tableau des infos individuelles de charge
+    -- Ext
+	TabInfoChgIndiv = extract_tab_info_chg_indiv(EntreeGlob); 
+    -- TabInfoChgIndiv[i] contient les infos seulement les infos concernant la charge i
+
+	--extraction et dispatch des infos globales
+    -- ExtDis
+	TabInfoChgGlob = extract_info_chg_glob(EntreeGlob)^NBC; 
+    -- TabInfoChgGlob[i] contient le chg2gen[i] des entrees globales.
+tel
+
+
+
+
+
+
+
+-------------------------------------------------------------------
+-- extraction des generateurs a partir des Entrees globales
+-------------------------------------------------------------------
+node extrGen(EntreeGlob : T_EntreeGlob)                      -- OK
+     returns (TabInfoGenIndiv : T_InfoGenIndiv^NBG;
+              TabInfoGenGlob   : T_InfoGenGlob^NBG;
+              TabIndiceGen  : INTNBG;);
+
+	var 
+		bidon : int;
+let
+	--extraction du tableau des infos individuelles de generateur
+	TabInfoGenIndiv = extract_tab_info_gen_indiv( EntreeGlob );
+
+	--extraction et dispatch des infos globales
+	TabInfoGenGlob = extract_info_gen_glob( EntreeGlob )^NBG; 
+
+	--tableaux des indices de gen
+	bidon, TabIndiceGen = fill<<incr_acc; NBG>>(0);
+tel
+
+
+
+
+
+
+
+-----------------------------------------------------------------
+-- Traitement Global des charges                                 
+-----------------------------------------------------------------
+node traiteChg(TabInfoChgIndiv : T_InfoChgIndiv^NBC; -- tableau de NBC entiers  --OK
+               TabInfoChgGlob : T_InfoChgGlob^NBC) -- tableau de NBC*NBC entiers
+     returns (TabEtatCharge : T_EtatCharge^NBC);-- tableau de NBC entiers
+let
+  TabEtatCharge = map<<traite_charge; NBC>>(
+                                            TabInfoChgIndiv,
+                                            TabInfoChgGlob
+                                            );
+    --Compare le i-eme element de TabInfoChgIndiv avec le max de la 
+    -- i-eme colonne de TabInfoChgGlob
+tel
+
+
+
+
+
+
+-------------------------------------------------------------------
+-- Traitement Global des generateurs                               
+-------------------------------------------------------------------
+node traiteGen(TabIndiceGen  : INTNBG;               -- OK
+               TabInfoGenIndiv : T_InfoGenIndiv^NBG;
+               TabInfoGenGlob   : T_InfoGenGlob^NBG;
+               TabEtatCharge : T_EtatCharge^NBC)
+returns (AllTabComChg  :T_ComChgNBC^NBG;
+              AllTabComVal  : BOOLNBC^NBG);
+let
+  AllTabComChg, AllTabComVal = map<<traite_gen; NBG>> (TabIndiceGen,
+                               TabInfoGenIndiv,
+                               TabInfoGenGlob,
+							   TabEtatCharge^NBG);
+tel
+	
+
+
+
+
+
+
+	
+-------------------------------------------------------
+-- Noeud principal                                     
+-------------------------------------------------------
+node testSilus(EntreeGlob : T_EntreeGlob) --Contient (au moins) les valeurs des charges et des generateurs du systeme
+-- OK OK OK 
+	returns (TabComChg : T_ComChg^NBC);
+var
+	TabInfoChgIndiv : T_InfoChgIndiv^NBC;
+	TabInfoChgGlob   : T_InfoChgGlob^NBC;
+	TabEtatCharge   : T_EtatCharge^NBC;
+
+	TabInfoGenIndiv : T_InfoGenIndiv^NBG;
+	TabInfoGenGlob   : T_InfoGenGlob^NBG;
+
+	TabIndiceGen  : INTNBG;
+
+	AllTabComChg  :  T_ComChgNBC^NBG;
+	AllTabComVal  : BOOLNBC^NBG;
+let
+
+-- Les 2 boites de gauche
+  TabInfoChgIndiv, TabInfoChgGlob = extrCharge(EntreeGlob);
+
+
+--traitement des charges
+   TabEtatCharge = traiteChg(TabInfoChgIndiv, TabInfoChgGlob);
+
+-- Les 4 boites au milieu a droite
+    TabInfoGenIndiv, TabInfoGenGlob, TabIndiceGen = extrGen(EntreeGlob);
+    
+
+ --traitement des generateurs
+    AllTabComChg, AllTabComVal = traiteGen(TabIndiceGen,
+										   TabInfoGenIndiv,
+										   TabInfoGenGlob,
+										   TabEtatCharge);
+
+-- Le calcul "Fus" tout a droite
+	TabComChg = fusion_com(AllTabComChg, AllTabComVal);
+
+tel
diff --git a/src/test/should_work/lionel/triSel.lus b/src/test/should_work/lionel/triSel.lus
new file mode 100644
index 00000000..35445330
--- /dev/null
+++ b/src/test/should_work/lionel/triSel.lus
@@ -0,0 +1,272 @@
+----------------------------------------------------
+----------------------------------------------------
+--                                                                                                        
+--  Selection sort with lustre iterators            
+--                      author : L.Morel                                                  
+--                      started on : 15 Mars 2002                             
+--                      last update : 3 July 2002               
+--
+-- august 2002 : Ludic compliant by Fabien ...
+--
+----------------------------------------------------
+----------------------------------------------------
+
+
+---------------
+-- CONSTANTS --
+---------------
+const size = 50;        -- size of the arrays
+
+
+
+-----------
+-- TYPES --
+-----------
+type tabSize = int^size;
+
+type Sort_accu = {CurrentRank : int,
+                  Tab : tabSize};
+
+type Exchange_accu = {MinVal : int,
+                      MinRank : int,
+                      RankFrom : int,
+                      CurrentVal : int,
+                      Rank : int};
+
+type Select_accu = {RankToFind : int,
+                    CurrentRank : int,
+                    Val : int};
+
+type MinFR_accu = {MinVal : int,
+                   MinRank : int,
+                   RankFrom : int,
+                   Rank : int};
+
+
+
+
+
+------------------------------------------------------------------------------------------------------
+-- MAIN NODE :                                                                                      --
+-- Given an array TIn, gives back an array TSorted which elements are the same as those of TIn, but --
+-- sorted from the smallest to the bigest element.                                                  --
+------------------------------------------------------------------------------------------------------
+node triSel(TIn : tabSize) returns (TSorted : tabSize); 
+var 
+        UnarySort_accu_out : Sort_accu;
+let
+        UnarySort_accu_out = red<<UnarySort;size>>(
+                                { CurrentRank = 0,
+                                           Tab = TIn},
+                                TIn);
+        TSorted = UnarySort_accu_out.Tab;
+tel
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+----------------------------------------------------------------------------------------------------
+-- UNARY_SORT NODE :                                                                              --
+-- Unary_sort takes as input an array of integers (accu_in.Tab).                                  --
+-- First, it determines the minimum of the elements that are after the rank 'accu_in.currentRank' --
+--                      in accu_in.Tab (it gets its rank and value)                                           --
+-- Then it gets the current element of Tab (determine bu accu_in.currentRank) :                   --
+--      'select' iteration                                                                        --
+--              and switches it with the next minimum   'Exchange' iteration                              --
+----------------------------------------------------------------------------------------------------
+node UnarySort(accu_in : Sort_accu ; eltIn :  int) 
+        returns (accu_out : Sort_accu);
+var
+        accu_out_select : Select_accu;
+        accu_out_min : MinFR_accu;
+        accu_out_exchange : Exchange_accu;
+        localTab : tabSize; 
+let
+    --------------------------------------------------------------
+    -- Find the minimum element (its rank and value) from the rank accu_in.CurrentRank
+        accu_out_min = red<<minFromRank;size>>( { MinVal = 0,          -- {0 :  value of the minimum in the begining of the iteration
+                                                            MinRank = 0,                                 --  0 :  rank of the minimum in the begining of the iteration
+                                                            RankFrom = accu_in.CurrentRank,              --  accu_in.CurrentRank :  Rank we have to look from for finding the minimum
+                                                            Rank = 0 },                                  --  0 : initialisation of the rank in the iteration
+                                                accu_in.Tab);
+    --------------------------------------------------------------
+    
+        
+
+
+    --------------------------------------------------------------
+    -- Select the current element in the array (of rank accu_in.CurrentRank)
+        accu_out_select = red<<select;size>>( { RankToFind = accu_in.CurrentRank,
+                                                           CurrentRank = 0,
+                                                           Val = 0 },
+                                              accu_in.Tab);
+    --------------------------------------------------------------
+
+
+
+    ------------------------------------------------------------------------
+    -- Exchange the two elements 'current' and 'minimum from current rank'
+        accu_out_exchange, localTab = map_red<<Exchange_i_j;size>>(
+                                         { MinVal = accu_out_min.MinVal,
+                                                        MinRank = accu_out_min.MinRank,
+                                                        RankFrom = accu_out_select.RankToFind,
+                                                        CurrentVal = accu_out_select.Val,
+                                                        Rank = 0 },
+                                         accu_in.Tab);
+    -----------------------------------------------------------------------
+
+
+
+    -----------------------------------------------------------------------
+    -- Update accumulator structure for next iteration
+        accu_out = { CurrentRank = accu_in.CurrentRank + 1, Tab = localTab };
+    ----------------------------------------------------------------------
+   
+tel
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+
+
+
+
+------------------------------------------------------------------------------------------------------
+-- MIN_FROM_RANK NODE                                                                               --
+-- When iterated, computes in accu_out.MinVal and accu_out.MinRank the value and rank of the        --
+-- minimum among the elements that are in the array after rank accu_in.Rank>From                     --
+------------------------------------------------------------------------------------------------------
+node minFromRank(accu_in : MinFR_accu; TabEltIn : int)
+        returns (accu_out : MinFR_accu);
+let
+
+
+        accu_out = {
+  -------------------------------------------------
+  -- accu_out.MinVal : 
+  MinVal = if ((accu_in.Rank=0) or (accu_in.Rank=accu_in.RankFrom)) then TabEltIn else
+             if (accu_in.Rank>=accu_in.RankFrom)      -- I can start looking at TabEltIn 
+             then if(TabEltIn<accu_in.MinVal)         -- I compare the current elt with the minimum of the elements already observed
+                  then TabEltIn                               -- the current elt is smaller,      -- I thus remember it as the new minimum         
+                  else accu_in.MinVal                 -- It's not a minimum,      -- I remember the one I observed before   
+             else accu_in.MinVal,                         -- I'm still not in the zone of the array       -- I want to search a minimum in        
+  --------------------------------------------------
+
+
+
+
+  --------------------------------------------------
+  -- accu_out.MinRank :  
+  MinRank = if ((accu_in.Rank=0) or (accu_in.Rank=accu_in.RankFrom)) then accu_in.Rank else
+              if (accu_in.Rank>=accu_in.RankFrom)    
+              then if(TabEltIn<accu_in.MinVal)          
+                   then accu_in.Rank                        
+                   else accu_in.MinRank             
+              else accu_in.MinRank,                     
+  -------------------------------------------------
+
+
+
+
+
+  ------------------------------------------------
+  -- accu_out.RankFrom
+  RankFrom = accu_in.RankFrom,                        -- Never changes (rank from which I want to start the search)
+  ------------------------------------------------
+
+                           
+
+  ------------------------------------------------
+  -- accu_out.Rank : 
+  Rank = accu_in.Rank + 1                                 -- Current rank for this iteration
+  ------------------------------------------------
+};
+tel
+------------------------------------------------------------------------------------------------------
+------------------------------------------------------------------------------------------------------
+
+
+
+
+
+---------------------------------------------------------------------------------------------------------
+-- ECHANGE_I_J :                                                                                       --
+-- When properly iterated, exchanges the two elements of indices accu_in.MinRank and accu_in.RankFrom  --
+---------------------------------------------------------------------------------------------------------
+node Exchange_i_j(accu_in : Exchange_accu ; eltIn : int) 
+        returns (accu_out : Exchange_accu ; eltOut : int);
+let
+        accu_out = { MinVal = accu_in.MinVal,
+                                  MinRank = accu_in.MinRank,
+                                  RankFrom = accu_in.RankFrom,
+                                  CurrentVal = accu_in.CurrentVal,
+                                  Rank = accu_in.Rank + 1 };
+
+        eltOut = if (accu_in.Rank = accu_in.MinRank)
+                 then accu_in.CurrentVal
+                 else if (accu_in.Rank = accu_in.RankFrom)
+                      then accu_in.MinVal
+                      else eltIn;
+tel
+---------------------------------------------------------------------------------------------------------
+---------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+---------------------------------------------------------------------------------------------------------
+-- SELECT :                                                                                            --
+-- selection function.                                                                                 --
+---------------------------------------------------------------------------------------------------------
+node select(accu_in : Select_accu; elt : int) 
+        returns (accu_out : Select_accu);
+let
+        accu_out = { RankToFind = accu_in.RankToFind,
+                                CurrentRank = accu_in.CurrentRank + 1,
+                                Val = if(accu_in.RankToFind=accu_in.CurrentRank)
+                                      then elt
+                                      else accu_in.Val };
+tel
+---------------------------------------------------------------------------------------------------------
+---------------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+
+
+
+----------------------------------------
+-- What follows is a PROPERTY         --
+--                                    --
+----------------------------------------
+
+-- Property :  
+-- is the array obtained by applying the "main" node sorted
+type sorted_iter_accu = { prev_elt :  int, 
+                          prop_is_tt : bool };
+
+node Sorted(TIn : tabSize) 
+     returns (ok : bool);
+var accu_out : sorted_iter_accu;
+    TSorted : tabSize;
+let
+  TSorted = main(TIn);
+  accu_out = red<<sorted_iter;size>>({prev_elt = 0, prop_is_tt = true}, TSorted);
+  ok = accu_out.prop_is_tt;
+tel
+
+node sorted_iter(accu_in : sorted_iter_accu; elt : int)
+     returns(accu_out : sorted_iter_accu);
+let
+  accu_out = { prev_elt = elt, 
+                               prop_is_tt = (accu_in.prev_elt <= elt) and (accu_in.prop_is_tt) };
+tel
\ No newline at end of file
diff --git a/src/test/should_work/packEnvTest/Condact.lus b/src/test/should_work/packEnvTest/Condact.lus
new file mode 100644
index 00000000..d7a69b34
--- /dev/null
+++ b/src/test/should_work/packEnvTest/Condact.lus
@@ -0,0 +1,41 @@
+/***********************************************
+-- File: Condact.lus 
+-- Author: Yussef   
+-- Date: 19/03/2004 
+***********************************************/
+
+--------------------------------------
+-- Generic Package Condact
+------------------------------------- 
+
+package Main 
+   provides node carre(e: int) returns (s: int);
+body
+  node carre(e: int) returns (s: int);
+    let
+      s = e*e;
+    tel
+end
+
+
+package TestCondact uses Main;
+  = Condact(int, int, Main::carre);
+
+
+model Condact 
+   needs 
+      type t1, t2;
+      node n(x: t1) returns (y: t2);
+      
+   provides node C(c: bool; d: t2; x: t1) returns (y: t2);
+
+body 
+   node C(c: bool; d: t2; x: t1) returns (y: t2);
+      let 
+         y = if c then current(n(x))
+                  else d -> pre y;
+      tel
+end
+
+    
+
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
new file mode 100644
index 00000000..0ef32063
--- /dev/null
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
@@ -0,0 +1,22 @@
+const size=10;
+
+type elementType = int;
+type iteratedStruct = {currentRank : int; rankToSelect : int; elementSelected : elementType};
+
+node selectEltInArray(array : elementType^size; rankToSelect : int) returns (elementSelected : elementType);
+var iterationResult : iteratedStruct;
+let
+  iterationResult = red<<selectOneStage, size>>({0, rankToSelect, 0}, array);
+  elementSelected = iterationResult.elementSelected; 
+tel
+
+
+
+node selectOneStage(acc_in : elementType; currentElt : elementType) returns (acc_out : elementType);
+let
+  acc_out = {currentRank = acc_in.currentRank+1;
+             rankToSelect = acc_in.rankToSelect;
+             elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
+                               then currentElt
+                               else acc_in.elementSelected};
+tel
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/main.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/main.lus
new file mode 100644
index 00000000..7f12a4d4
--- /dev/null
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/main.lus
@@ -0,0 +1,28 @@
+--package intArray is packageTableau(int, 10, equals, gt);
+--package intArray is packageTableau(int, 10, Lustre::eq, Lustre::igt);
+package intArray is packageTableau(int, 10, =, >);
+--package intArray is packageTableau(int, 10, =,  Lustre::igt);
+
+--package Lustre is packageTableau(int, 10, =, >);
+
+package main
+  uses intArray;--, intArray2, intArray3;
+  provides node main(a : int^10) returns (tri : int^10; pos_min, min, pos_max, max: int);
+
+body 
+
+node main(a : int^10) returns ( tri : int^10; 
+                               pos_min, 
+                               min, 
+                               pos_max, 
+                               max: int);
+let
+  min = intArray::getMinimumIn_(a);
+  pos_min = intArray::getRank_ofMinimumIn_(a);
+  max = intArray::getMaximumIn_(a);
+  pos_max = intArray::getRank_ofMaximumIn_(a);
+  tri = intArray::sort_(a);
+tel
+
+
+end
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/noeudsIndependants.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/noeudsIndependants.lus
new file mode 100644
index 00000000..f188865c
--- /dev/null
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/noeudsIndependants.lus
@@ -0,0 +1,10 @@
+
+node equals(a, b : int) returns (r : bool);
+let
+  r = a = b;
+tel
+
+node gt(a, b : int) returns (r : bool);
+let
+  r = a > b;
+tel
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
new file mode 100644
index 00000000..9f35e811
--- /dev/null
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
@@ -0,0 +1,375 @@
+model packageTableau
+needs 
+  type elementType;
+  const size : int; -- on doit supposer que size>0;
+  node _isEqualTo_(e1 : elementType; e2 : elementType) returns (isequalto : bool);
+  node _isGreaterThan_(e1 : elementType; e2 : elementType) returns (isgreaterthan : bool);
+
+provides
+  type arrayType;
+  node selectElementOfRank_inArray_(rankToSelect : int;array : arrayType) returns (elementSelected : elementType);
+  node getMaximumIn_(array : arrayType) returns (maximumElement : elementType);
+  node getRank_ofMaximumIn_(array : arrayType) returns (rankOfMaximumElement : int);
+  node getMinimumIn_(array : arrayType) returns (minimumElement : elementType);
+  node getRank_ofMinimumIn_(array : arrayType) returns (rankOfMinimumElement : int);
+  node _isLoselySorted(array : arrayType) returns (array_isLoselySorted : bool);
+  node sort_(array : arrayType) returns (arraySorted : arrayType);   
+  node _isElementOf_(e : elementType; t : arrayType) returns (iselementof : bool);
+-- on peut encore imaginer:  
+-- 1) echange de 2 éléments dans un tableau (donnés par leurs indices)
+-- 2) interclassement de 2 tableaux
+  
+--node interleaving(array1 : arrayType; array2 : arrayType) returns (interleavedArray : elementType^(2*size));
+
+-- pour tester:  on choisit un elementType facile: les entiers. 
+--const size = 10;
+--type elementType = int;
+
+--node _isEqualTo_(e1 : elementType; e2 : elementType) returns (isequalto : bool);
+--let
+--  isequalto = e1 = e2;
+--tel
+
+--node _isGreaterThan_(e1, e2 : elementType) returns (isgreaterthan : bool);
+--let
+--  isgreaterthan = e1>e2;
+--tel
+
+
+--node _isGreaterOrEqualTo_(e1, e2 : elementType) returns (ge : bool);
+--let
+--  ge = _isGreaterThan_(e1, e2) or _isEqualTo_(e1, e2);
+--tel
+
+
+
+
+body
+
+-- Type fourni: le type "tableau d'éléments elementType"
+type arrayType = elementType^size;
+
+
+-- constantes et types internes
+type iteratedStruct = {currentRank : int; rankToSelect : int; elementSelected : elementType};
+-- les types suivants sont uniquement utilisés pour l'algorithme de tri
+type Sort_accu = {CurrentRank : int;
+				  Tab : arrayType};
+type Exchange_accu = {MinVal : elementType;
+					  MinRank : int;
+					  RankFrom : int;
+					  CurrentVal : elementType;
+					  Rank : int};
+
+type Select_accu = {RankToFind : int;
+					CurrentRank : int;
+					Val : elementType};
+
+type MinFR_accu = {MinVal : elementType;
+                   MinRank : int;
+                   RankFrom : int;
+                   Rank : int};
+
+
+-- est-ce qu'un element est dans un tableau
+type T_isElementOf_ = {eltToSearch : elementType; iselementof : bool};
+
+node _isElementOf_(e : elementType; t : arrayType) returns (iselementof : bool);
+var acc_out : T_isElementOf_;
+let
+  acc_out = red<<iterated_isElementOf_, size>>({eltToSearch = e; iselementof = false}, t);
+tel
+
+
+node iterated_isElementOf_(acc_in : T_isElementOf_; elt_in : elementType) returns (acc_out : T_isElementOf_);
+let
+  acc_out = {eltToSearch = acc_in.eltToSearch;
+             iselementof = acc_in or _isEqualTo_(acc_in.eltToSearch, elt_in)};
+tel
+
+
+
+-- noeud de selection d'un element dans un tableau
+-- assume : rankToSelect>=0
+-- guarantee : _isElementOf_(elementSelected, array);
+node selectElementOfRank_inArray_(rankToSelect : int;array : arrayType) returns (elementSelected : elementType)
+%ASSUME:assumeSelectElementOfRank_inArray_%
+%GUARANTEE:guaranteeSelectElementOfRank_inArray_%
+var iterationResult : iteratedStruct;
+let
+  iterationResult = red<<selectOneStage, size>>({currentRank = 0; rankToSelect = rankToSelect; elementSelected = array[0]}, array);
+  elementSelected = iterationResult.elementSelected; 
+tel
+
+node assumeSelectElementOfRank_inArray_(rankToSelect : int;array : arrayType) returns (assumeOK : bool);
+let
+  assumeOK = rankToSelect >= 0;
+tel
+
+node guaranteeSelectElementOfRank_inArray_(rankToSelect : int;array : arrayType; elementSelected : elementType) returns (guaranteeOK : bool);
+let
+  guaranteeOK = _isElementOf_(elementSelected, array);
+tel
+
+
+-- assume : acc_in.currentRank>=0
+-- guarantee : acc_out.currentRank>acc_in.currentRank
+node selectOneStage(acc_in : iteratedStruct; currentElt : elementType) returns (acc_out : iteratedStruct);
+let
+  acc_out = {currentRank = acc_in.currentRank+1;
+             rankToSelect = acc_in.rankToSelect;
+             elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
+                               then currentElt
+                               else acc_in.elementSelected};
+tel
+
+--node assumeSelectOneStage(
+
+
+
+
+-- determination du maximum
+-- guarantee : forall<<_isGreaterOrEqualTo_;size>>(maximumElement^size, array);
+node getMaximumIn_(array : arrayType) returns (maximumElement : elementType);
+let
+  maximumElement = red<<selectMax, size>>(array[0], array);
+tel
+
+-- guarantee : _isGreaterOrEqualTo_(e, e1) or _isGreaterOrEqualTo_(e, e2)
+node selectMax(e1, e2 : elementType) returns (e : elementType);
+let
+  e = if(_isGreaterThan_(e1, e2)) then e1 else e2;
+tel
+
+
+
+-- determination du rang du maximum
+node getRank_ofMaximumIn_(array : arrayType) returns (rankOfMaximumElement : int);
+var local : currentRank_withMemorizedRank;
+let
+  local = red<<selectMaxRank, size>>({currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = array[0]}, array);
+  rankOfMaximumElement = local.rankOfMemorizedVal;
+tel
+
+type currentRank_withMemorizedRank = {currentRank : int; rankOfMemorizedVal : int; memorizedVal : elementType};
+
+
+
+-- assume : acc_in.currentRank>=0
+-- guarantee : acc_out.currentRank>acc_in.currentRank
+node selectMaxRank(acc_in : currentRank_withMemorizedRank; e1 : elementType) returns (acc_out : currentRank_withMemorizedRank);
+let
+  acc_out = {currentRank = acc_in.currentRank+1;
+             rankOfMemorizedVal = if(_isGreaterThan_(e1, acc_in.memorizedVal)) then acc_in.currentRank else acc_in.rankOfMemorizedVal;
+             memorizedVal = if(_isGreaterThan_(e1, acc_in.memorizedVal)) then e1 else acc_in.memorizedVal};
+tel
+
+
+
+
+-- determination du minimum
+-- guarantee : forall<<_isGreaterOrEqualTo_;size>>(array, minimumElement^size);
+node getMinimumIn_(array : arrayType) returns (minimumElement : elementType);
+var maximum : elementType;
+let
+  maximum = getMaximumIn_(array);
+  minimumElement = red<<selectMin, size>>(maximum, array);
+tel
+
+
+node selectMin(e1, e2 : elementType) returns (e : elementType);
+let
+  e = if(_isGreaterThan_(e1, e2)) then e2 else e1;
+tel
+
+
+-- determination du rang du minimum
+-- guarantee rankOfMaximumElement>=0;
+node getRank_ofMinimumIn_(array : arrayType) returns (rankOfMinimumElement : int);
+var minElement : elementType;
+let
+  minElement = getMinimumIn_(array);
+  rankOfMinimumElement = red<<selectMinRank, size>>({currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = minElement}, array).rankOfMemorizedVal;
+tel
+
+
+-- assume : acc_in.currentRank>=0
+-- guarantee : acc_out.currentRank>acc_in.currentRank
+node selectMinRank(acc_in : currentRank_withMemorizedRank; elt : elementType) returns (acc_out : currentRank_withMemorizedRank);
+let
+  acc_out = {currentRank = acc_in.currentRank+1;
+             rankOfMemorizedVal = if(_isEqualTo_(acc_in.memorizedVal, elt)) then acc_in.currentRank else acc_in.rankOfMemorizedVal;
+             memorizedVal = acc_in.memorizedVal};
+tel
+
+
+type forSortingAlgo =  {previousElement : elementType; sortedUpToHere : bool};
+
+-- est-ce que le tableau est ordonné ?
+node _isLoselySorted(array : arrayType) returns (array_isLoselySorted : bool);
+var result : forSortingAlgo;
+let 
+  result = red<<isLocallyLoselySorted, size>>({previousElement = array[0]; sortedUpToHere = true}, array);
+  array_isLoselySorted = result.sortedUpToHere;
+tel
+
+node isLocallyLoselySorted(acc_in : forSortingAlgo; elt : elementType) returns (acc_out : forSortingAlgo);
+let
+  acc_out = {previousElement = elt; 
+             sortedUpToHere = _isGreaterOrEqualTo_(elt, acc_in.previousElement) and acc_in.sortedUpToHere};
+tel
+
+
+
+-- Tri d'un tableau
+-- guarantee : _isLoselySorted(arraySorted);
+node sort_(array : arrayType) returns (arraySorted : arrayType); 
+var 
+	UnarySort_accu_out : Sort_accu;
+let
+	UnarySort_accu_out = red<<UnarySort, size>>(
+                              {CurrentRank = 0;
+							            Tab = array}, -- Values given for test
+							  array);	-- same
+	arraySorted = UnarySort_accu_out.Tab;
+tel
+
+
+
+
+-- Unary_sort takes as input an array of integers (accu_in.Tab).
+-- First, it determines the minimum of the elements that are after the rank 'accu_in.currentRank'
+-- 			in accu_in.Tab (it gets its rank and value)
+-- Then it gets the current element of Tab (determinex by accu_in.currentRank) : 
+--      'select' iteration
+--		and switches it with the next minimum	'Exchange' iteration
+-- accu_in.CurrentRank : indice permettant d'identifier les élements
+--                       traités jusque là. A cet étage de l'itération, on trie les élements
+--                       d'indice compris entre accu_in.CurrentRank et la taille du tableau -1
+-- accu_in.Tab : tableau en cours de tri, Tab est tel que \forall i, j < accu_in.CurrentRank. i<j => Tab[i]<Tab[j]
+-- accu_out.CurrentRank : accu_in.CurrentRank + 1 : à l'étage suivant de l'itération, on s'occupera de trier
+--                        les élements d'incide compris entre accu_out.CurrentRank et la taille du tableau -1
+-- accu_in.Tab : tableau en cours de tri, Tab est tel que \forall i, j < accu_out.CurrentRank. i<j => Tab[i]<Tab[j]
+node UnarySort(accu_in : Sort_accu ; eltIn :  int) 
+	returns (accu_out : Sort_accu);
+var
+	accu_out_select : Select_accu;
+-- accu_out_select.RankToFind : rang de l'élement dont on cherche la valeur
+-- accu_out_select.CurrentRank : rang courant dans l'itération
+-- accu_out_select.Val : valeur de l'élement de rang RankToFind
+	accu_out_min : MinFR_accu; 
+-- accu_out_min.MinVal : valeur du minimum
+-- accu_out_min.MinRank : rang du minimum
+-- acc_out_min.RankFrom : rang à partir duquel on cherche le minimum
+-- accu_out_min.Rank :  rang courant (inutile en dehors de l'itération
+	accu_out_exchange : Exchange_accu;
+-- accu_out_exchange.MinVal : Valeur du minimum dans la tranche considérée
+-- accu_out_exchange.MinRank : rang du minimum dans la tranche considérée
+-- accu_out_exchange.RankFrom : rang à partir duquel on fait l'échange
+-- accu_out_exchange.CurrentVal :               -- les 4 premieres valeurs ne changent jamis
+-- accu_out_exchange.Rank : rang ou on en est dans le parcours de l'échange
+	localTab : arrayType; 
+-- localTab : tableau calculé (trié un cran plus loin)
+let
+  -- je commence par trouver le minimum à partir de accu_in.CurrentRank
+  accu_out_min = red<<minFromRank, size>>({MinVal = 0; 
+                                         MinRank = accu_in.CurrentRank;
+                                         RankFrom = accu_in.CurrentRank;
+                                         Rank = 0}; 
+                                         accu_in.Tab);
+
+  -- ensuite, je trouve la valeur du rang courant (rang où j'en suis 
+  -- de l'itération de UnarySort
+  accu_out_select = red<<select, size>>({RankToFind = accu_in.CurrentRank;
+                                       CurrentRank = 0;
+                                       Val = 0};
+                                       accu_in.Tab);
+
+  -- puis j'échange le minimum trouvé et l'élement de rang courant
+  --    (courant dans l'itération de UnarySort)
+  accu_out_exchange, localTab = map_red<<Exchange_i_j, size>>({MinVal = accu_out_min.MinVal;
+                                                             MinRank = accu_out_min.MinRank;
+                                                             RankFrom = accu_out_select.RankToFind;
+                                                             CurrentVal = accu_out_select.Val;
+                                                             Rank = 0},
+                                                             accu_in.Tab);
+  accu_out = {CurrentRank = accu_in.CurrentRank + 1,
+                       Tab = localTab};
+tel
+
+
+
+
+
+node minFromRank(accu_in : MinFR_accu; TabEltIn : elementType)
+	returns (accu_out : MinFR_accu);
+let
+  accu_out = {MinVal = if (accu_in.Rank<=accu_in.RankFrom) 
+                                 then TabEltIn
+                                 else
+                                   if (accu_in.Rank>=accu_in.RankFrom)    
+                                   -- I can start looking at TabEltIn
+                                   then if(TabEltIn<accu_in.MinVal)
+                                   -- I compare the current elt with 
+                                   -- the minimum of the elements already observed
+                                        then TabEltIn			            
+                                        -- the current elt is smaller,  
+                                        -- then, I remember it as the new minimum
+                                        else accu_in.MinVal	            
+                                       -- It's not a minimum,  
+                                       -- I remember the one I observed before
+                                   else accu_in.MinVal; 	                
+                                   -- I'm still not in the zone of the array 
+                                   --I want to search a minimum in
+                        MinRank = if (accu_in.Rank>accu_in.RankFrom)   
+                                  then if(TabEltIn<accu_in.MinVal)
+                                       then accu_in.Rank
+                                       else accu_in.MinRank
+                                  else accu_in.MinRank ;
+                       RankFrom = accu_in.RankFrom;
+                       --Never changes (rank from which I want 
+                       --               to start the search)
+                       Rank = accu_in.Rank + 1	                        
+                       -- Current rank for this iteration
+                       };
+tel
+
+
+
+
+-- les acc servent juste à mémoriser les valeurs qu'on veut 
+node Exchange_i_j(accu_in : Exchange_accu ; eltIn : elementType) 
+	returns (accu_out : Exchange_accu ; eltOut : elementType);
+let
+	accu_out = {MinVal = accu_in.MinVal;
+				             MinRank = accu_in.MinRank;
+				             RankFrom = accu_in.RankFrom;
+				             CurrentVal = accu_in.CurrentVal;
+				             Rank = accu_in.Rank + 1};
+
+	eltOut = if(accu_in.Rank = accu_in.MinRank)
+			 then accu_in.CurrentVal
+			 else if(accu_in.Rank = accu_in.RankFrom)
+				  then accu_in.MinVal
+				  else eltIn;
+tel
+
+
+
+-- selection function.
+node select(accu_in : Select_accu; elt : elementType) 
+	returns (accu_out : Select_accu);
+let
+	accu_out = {RankToFind = accu_in.RankToFind;
+				CurrentRank = accu_in.CurrentRank + 1;
+				Val =  if(accu_in.RankToFind=accu_in.CurrentRank)
+					  then elt
+					  else accu_in.Val};
+tel
+
+end
+
+
+
+
+
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/tri.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/tri.lus
new file mode 100644
index 00000000..14c77e2d
--- /dev/null
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/tri.lus
@@ -0,0 +1,225 @@
+----------------------------------------------------
+----------------------------------------------------
+--												          
+--  Selection sort with lustre iterators            
+-- 			author : L.Morel					          
+-- 			started on : 15 Mars 2002			      
+-- 			last update : 3 July 2002	             
+----------------------------------------------------
+----------------------------------------------------
+
+
+-- PARTOUT,  JE SUPPOSE QUE LES ELEMENTS SONT TOUS POSITIFS
+
+-- CONSTANTS
+
+const size = 10;	-- size of the arrays
+
+
+-- TYPES
+type INTSIZE = int^size;
+type Sort_accu = {CurrentRank : int;
+				  Tab : INTSIZE};
+
+type Exchange_accu = {MinVal : int;
+					  MinRank : int;
+					  RankFrom : int;
+					  CurrentVal : int;
+					  Rank : int};
+
+type Select_accu = {RankToFind : int;
+					CurrentRank : int;
+					Val : int};
+
+type MinFR_accu = {MinVal : int;
+     MinRank : int;
+     RankFrom : int;
+     Rank : int};
+
+
+
+-- Unary_sort takes as input an array of integers (accu_in.Tab).
+-- First, it determines the minimum of the elements that are after the rank 'accu_in.currentRank'
+-- 			in accu_in.Tab (it gets its rank and value)
+-- Then it gets the current element of Tab (determinex by accu_in.currentRank) : 
+--      'select' iteration
+--		and switches it with the next minimum	'Exchange' iteration
+-- accu_in.CurrentRank : indice permettant d'identifier les élements
+--                       traités jusque là. A cet étage de l'itération, on trie les élements
+--                       d'indice compris entre accu_in.CurrentRank et la taille du tableau -1
+-- accu_in.Tab : tableau en cours de tri, Tab est tel que \forall i, j < accu_in.CurrentRank. i<j => Tab[i]<Tab[j]
+-- accu_out.CurrentRank : accu_in.CurrentRank + 1 : à l'étage suivant de l'itération, on s'occupera de trier
+--                        les élements d'incide compris entre accu_out.CurrentRank et la taille du tableau -1
+-- accu_in.Tab : tableau en cours de tri, Tab est tel que \forall i, j < accu_out.CurrentRank. i<j => Tab[i]<Tab[j]
+node UnarySort(accu_in : Sort_accu ; eltIn :  int) 
+	returns (accu_out : Sort_accu);
+var
+	accu_out_select : Select_accu;
+-- accu_out_select.RankToFind : rang de l'élement dont on cherche la valeur
+-- accu_out_select.CurrentRank : rang courant dans l'itération
+-- accu_out_select.Val : valeur de l'élement de rang RankToFind
+	accu_out_min : MinFR_accu; 
+-- accu_out_min.MinVal : valeur du minimum
+-- accu_out_min.MinRank : rang du minimum
+-- acc_out_min.RankFrom : rang à partir duquel on cherche le minimum
+-- accu_out_min.Rank :  rang courant (inutile en dehors de l'itération
+	accu_out_exchange : Exchange_accu;
+-- accu_out_exchange.MinVal : Valeur du minimum dans la tranche considérée
+-- accu_out_exchange.MinRank : rang du minimum dans la tranche considérée
+-- accu_out_exchange.RankFrom : rang à partir duquel on fait l'échange
+-- accu_out_exchange.CurrentVal :               -- les 4 premieres valeurs ne changent jamis
+-- accu_out_exchange.Rank : rang ou on en est dans le parcours de l'échange
+	localTab : int^size; 
+-- localTab : tableau calculé (trié un cran plus loin)
+let
+  -- je commence par trouver le minimum à partir de accu_in.CurrentRank
+  accu_out_min = red<<minFromRank, size>>(MinFR_accu{MinVal = 0; 
+                                         MinRank = accu_in.CurrentRank;
+                                         RankFrom = accu_in.CurrentRank;
+                                         Rank = 0}, 
+                                         accu_in.Tab);
+
+  -- ensuite, je trouve la valeur du rang courant (rang où j'en suis 
+  -- de l'itération de UnarySort
+  accu_out_select = red<<select, size>>(Select_accu{RankToFind = accu_in.CurrentRank;
+                                       CurrentRank = 0;
+                                       Val = 0},
+                                       accu_in.Tab);
+
+  -- puis j'échange le minimum trouvé et l'élement de rang courant
+  --    (courant dans l'itération de UnarySort)
+  accu_out_exchange, localTab = map_red<<Exchange_i_j, size>>(
+                                                             Exchange_accu{MinVal = accu_out_min.MinVal;
+                                                             MinRank = accu_out_min.MinRank;
+                                                             RankFrom = accu_out_select.RankToFind;
+                                                             CurrentVal = accu_out_select.Val;
+                                                             Rank = 0},
+                                                             accu_in.Tab);
+  accu_out = Sort_accu{CurrentRank = accu_in.CurrentRank + 1;
+                       Tab = localTab};
+tel
+
+
+
+
+
+node minFromRank(accu_in : MinFR_accu; TabEltIn : int)
+	returns (accu_out : MinFR_accu);
+let
+  accu_out = MinFR_accu{MinVal = if (accu_in.Rank<=accu_in.RankFrom) 
+                                 then TabEltIn
+                                 else
+                                   if (accu_in.Rank>=accu_in.RankFrom)    
+                                   -- I can start looking at TabEltIn
+                                   then if(TabEltIn<accu_in.MinVal)
+                                   -- I compare the current elt with 
+                                   -- the minimum of the elements already observed
+                                        then TabEltIn			            
+                                        -- the current elt is smaller,  
+                                        -- then, I remember it as the new minimum
+                                        else accu_in.MinVal	            
+                                       -- It's not a minimum,  
+                                       -- I remember the one I observed before
+                                   else accu_in.MinVal; 	                
+                                   -- I'm still not in the zone of the array 
+                                   --I want to search a minimum in
+                        MinRank = if (accu_in.Rank>accu_in.RankFrom)   
+                                  then if(TabEltIn<accu_in.MinVal)
+                                       then accu_in.Rank
+                                       else accu_in.MinRank
+                                  else accu_in.MinRank ;
+                       RankFrom = accu_in.RankFrom;
+                       --Never changes (rank from which I want 
+                       --               to start the search)
+                       Rank = accu_in.Rank + 1	                        
+                       -- Current rank for this iteration
+                       };
+tel
+
+
+
+
+-- les acc servent juste à mémoriser les valeurs qu'on veut 
+node Exchange_i_j(accu_in : Exchange_accu ; eltIn : int) 
+	returns (accu_out : Exchange_accu ; eltOut : int);
+let
+	accu_out = Exchange_accu{MinVal = accu_in.MinVal;
+				             MinRank = accu_in.MinRank;
+				             RankFrom = accu_in.RankFrom;
+				             CurrentVal = accu_in.CurrentVal;
+				             Rank = accu_in.Rank + 1};
+
+	eltOut = if(accu_in.Rank = accu_in.MinRank)
+			 then accu_in.CurrentVal
+			 else if(accu_in.Rank = accu_in.RankFrom)
+				  then accu_in.MinVal
+				  else eltIn;
+tel
+
+
+
+-- selection function.
+node select(accu_in : Select_accu; elt : int) 
+	returns (accu_out : Select_accu);
+let
+	accu_out = Select_accu{RankToFind = accu_in.RankToFind;
+				CurrentRank = accu_in.CurrentRank + 1;
+				Val =  if(accu_in.RankToFind=accu_in.CurrentRank)
+					  then elt
+					  else accu_in.Val};
+tel
+
+
+
+-- the main node gets an array TIn as inputs and give the corresponding sorted array Ttrie
+node main(TIn : int^size) returns (TSorted : int^size); 
+var 
+	UnarySort_accu_out : Sort_accu;
+let
+	UnarySort_accu_out = red<<UnarySort,size>>(
+                              Sort_accu{CurrentRank = 0;
+                                            Tab = [7,8,4,3,2,9,1,10,2,7]}; -- Values given for test
+                                            [7,8,4,3,2,9,1,10,2,7]);	-- same
+	TSorted = UnarySort_accu_out.Tab;
+tel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Property
+-- is the array obtained by applying the "main" node sorted
+type sorted_iter_accu = {prev_elt :  int, 
+                         prop_is_tt : bool};
+
+
+node Sorted(TIn :  int^size) 
+     returns (res :  bool);
+var accu_out : sorted_iter_accu;
+    TSorted :  int^size;
+let
+  TSorted = main(TIn);
+  accu_out = red<<sorted_iter,size>>(sorted_iter_accu{prev_elt = 0, prop_is_tt = true}, TSorted);
+  res = accu_out.prop_is_tt;
+tel
+
+
+node sorted_iter(accu_in : sorted_iter_accu; elt : int)
+     returns(accu_out : sorted_iter_accu);
+let
+  accu_out = sorted_iter_accu{prev_elt = elt, 
+              prop_is_tt = (accu_in.prev_elt <= elt) and (accu_in.prop_is_tt)};
+tel
\ No newline at end of file
diff --git a/src/test/should_work/packEnvTest/modelInst.lus b/src/test/should_work/packEnvTest/modelInst.lus
new file mode 100644
index 00000000..6b7af8d4
--- /dev/null
+++ b/src/test/should_work/packEnvTest/modelInst.lus
@@ -0,0 +1,42 @@
+-- Un modele simple
+-------------------
+model m1
+  needs 
+    type t;
+	
+  provides
+    node n ( init, in : t ) returns ( ok : t );
+	
+  body
+
+node n(init, in: t) returns (ok: t);
+let
+  ok = init -> pre in;
+tel
+  end
+
+  
+
+-- le package principal definit une instance de "m1" localement
+---------------------------------------------------------------- 
+package main
+	
+  provides node main(i: int; ray : real) returns (oint: int; obool: bool; oreal: real);
+
+  body
+	
+  package Pint is m1( int );
+  package Pbool is m1( bool );
+  package Preal is m1( real );
+  
+const pi = 3.14159;
+      
+node main(i: int; ray : real) returns (oint: int; obool: bool; oreal: real);
+let
+  oint = Pint::n(0, i);
+  obool = Pbool::n(true, i < 50);
+  oreal = Preal::n(0., 0. -> pi * ray * ray);
+tel 
+  
+  end
+
diff --git a/src/test/should_work/packEnvTest/packages.lus b/src/test/should_work/packEnvTest/packages.lus
new file mode 100644
index 00000000..3e4f8399
--- /dev/null
+++ b/src/test/should_work/packEnvTest/packages.lus
@@ -0,0 +1,78 @@
+-----------------------------
+-- modSimple: un model simple 
+--    * necessite : un type
+--    * fournit : un noeud 
+----------------------------
+model modSimple
+  needs 
+    type t;
+  provides
+    node fby1(init, fb: t) returns (next: t);
+body
+  
+node fby1(init, fb: t) returns (next: t);
+let
+  next = init -> pre fb;
+tel
+end
+
+-----------------------
+-- qq instances de modSimple
+-----------------------
+package pint is modSimple(int);
+package pbool is modSimple(bool);
+package preal is modSimple(real);
+
+
+--------------------------
+-- un package intermediaire
+-------------------------
+package inter
+  uses pbool, pint, preal;
+  provides 
+    node preced(in: selType) returns (out, out2: selType);
+    const n : int;
+    type selType;
+body        
+   
+  type selType = { i: int; b: bool; r: real };
+
+  -----------------------
+  -- qq instances de modSimple
+  -----------------------
+   --package pint is modSimple(int);
+   --package pbool is modSimple(bool);
+   --package preal is modSimple(real);
+
+   --package pSel is modSimple( { i: int; b: bool; r: real } );
+        
+	const n: int = -4;
+	node preced(in: selType) returns (out, out2: selType);
+	let
+                out2 = { i = 0; b = true; r = 0.}; --pSel::fby1(in);
+  		out.i = pint::fby1(out2.i, in.i);
+  		out.b = pbool::fby1(out2.b, in.b);
+  		out.r = preal::fby1(out2.r, in.r);
+	tel 
+end
+---------------------------
+-- le package principal
+--------------------------
+package mainPack
+        uses inter;
+        provides 
+                node preced(in: inter::selType) returns (out: inter::selType); 
+body
+  
+     type  T = int^N;
+     const X = N;
+           N : int = -2 * inter::n;
+ 
+       -- node preced(in: bool) returns (out: bool);
+        node preced(in: inter::selType) returns (out: inter::selType);
+        	var out2 : inter::selType;
+				let
+                out, out2 =  inter::preced( in );
+        tel 
+end
+
diff --git a/src/test/should_work/packEnvTest/packages2.lus b/src/test/should_work/packEnvTest/packages2.lus
new file mode 100644
index 00000000..024efd4d
--- /dev/null
+++ b/src/test/should_work/packEnvTest/packages2.lus
@@ -0,0 +1,77 @@
+-----------------------------
+-- modSimple: un model simple 
+--    * necessite : un type
+--    * fournit : un noeud 
+----------------------------
+model modSimple
+  needs 
+    type t;
+  provides
+    node fby1(init, fb: t) returns (next: t);
+body
+  
+node fby1(init, fb: t) returns (next: t);
+let
+  next = init -> pre fb;
+tel
+end
+
+-----------------------
+-- qq instances de modSimple
+-----------------------
+package pint is modSimple(int);
+package pbool is modSimple(bool);
+package preal is modSimple(real);
+
+
+
+--------------------------
+-- un package intermediaire
+-------------------------
+package inter
+  uses pbool, preal;
+  provides 
+node preced(in: selType) returns (out, out2: selType);
+const n : int;
+type selType;
+     body        
+     
+type selType = { i: int; b: bool; r: real };
+     
+  -----------------------
+  -- qq instances de modSimple
+  -----------------------
+   --package pint is modSimple(int);
+   --package pbool is modSimple(bool);
+   --package preal is modSimple(real);
+
+   --package pSel is modSimple( { i: int; b: bool; r: real } );
+        
+const n: int = -4;
+node preced(in: selType) returns (out, out2: selType);
+let
+  out2 = { i = 0; b = true; r = 0.}; --pSel::fby1(in);
+  out.i = pint::fby1(out2.i, in.i);
+  out.b = pbool::fby1(out2.b, in.b);
+  out.r = preal::fby1(out2.r, in.r);
+tel 
+  end
+---------------------------
+-- le package principal
+--------------------------
+
+node foo(in: int) returns (out :  int);
+let
+  out = in;
+tel
+  
+const X = N;
+      N : int = 8;
+      
+type  T = int^N;
+  -- node preced(in: bool) returns (out: bool);
+node preced(in: inter::selType) returns (out: inter::selType);
+let
+  out =  in;
+tel 
+
diff --git a/src/test/should_work/to_sort_out/asservi.lus b/src/test/should_work/to_sort_out/asservi.lus
new file mode 100644
index 00000000..ecc36bee
--- /dev/null
+++ b/src/test/should_work/to_sort_out/asservi.lus
@@ -0,0 +1,102 @@
+type pendule;
+
+const T=0.1; L=2.0; G=10.0; 
+
+function sin(x:real) returns (y:real);
+
+function cos(x:real) returns (y:real);
+
+function sqrt(x:real) returns (y:real);
+
+function make_pend(x0,y0,x,y:real) returns (p:pendule);
+
+node I(dx:real) returns (x:real); --un integrateur
+-------------------------------------------------------------
+--integration par rectangle de pas T
+-------------------------------------------------------------
+let
+	 x = 0.0-> pre (T *dx + x); 
+tel;
+
+node I2(d2x:real) returns (x:real);
+var dx:real;
+let
+	dx = I(d2x);
+	x =  dx -> T *dx +  pre x; 
+tel;
+
+node D(x:real) returns (d:real);
+-------------------------------------------------------------
+--derivation par difference finie de pas T
+-------------------------------------------------------------
+let 
+	d=0.0-> (x- pre x)/T;
+tel;
+
+node PEND( d2x0,d2y0:real) returns (teta:real);
+-------------------------------------------------------------
+--equation du pendule	
+--teta angle du pendule avec la verticale
+--d2x0,d2y0 derivees secondes des coordonnees du pied
+--L longueur du pendule
+--G accelleration de la pesanteur
+-------------------------------------------------------------
+let
+-- ??? ne peut pas marcher! ???
+  teta = I2((sin(teta)*(d2y0+G) -cos(teta)*d2x0)/L);
+tel;
+
+node jeu(x0,y0:real) returns (p:pendule);
+-------------------------------------------------------------
+--pendule pilote a la main
+--x0,y0 sont les coordonnees du pied
+-------------------------------------------------------------
+var d2x0,d2y0,teta,x,y:real;
+let	
+	-----------------------------------------------------
+	--derivation
+	-----------------------------------------------------
+	d2x0=D(D(x0));
+	d2y0=D(D(y0));
+	-----------------------------------------------------
+	--pendule
+	-----------------------------------------------------
+	teta = PEND(d2x0,d2y0);
+	-----------------------------------------------------
+	--geometrie
+	-----------------------------------------------------
+	x = x0+L*sin(teta);
+	y = y0+L*cos(teta);
+	p = make_pend(x0,y0,x,y);
+tel;
+
+	
+	
+node asservi(delta:real) returns (p:pendule);
+-------------------------------------------------------------
+--pendule asservi
+--delta est une pichenette en derivee seconde initiale
+-------------------------------------------------------------
+var d2x0,d2y0,teta,x0,y0,x,y:real;
+let
+	-----------------------------------------------------
+	--loi de regulation
+	-----------------------------------------------------
+	d2y0 =0.0;
+	d2x0 = delta -> 8.0*G*sin(teta)/cos(teta)
+			+sqrt(1.0*G*L)*D(teta) 
+			+0.5*x0/L;
+	-----------------------------------------------------
+	--pendule
+	-----------------------------------------------------
+	teta = PEND( delta -> d2x0,d2y0);
+	-----------------------------------------------------
+	--geometrie
+	-----------------------------------------------------
+	x  = x0+L*sin(teta);
+	y  = y0+L*cos(teta);
+	x0 = I2(d2x0);
+	y0 = I2(d2y0);
+	p  = make_pend(x0,y0,x,y);
+	
+tel;
diff --git a/src/test/should_work/to_sort_out/const2.lus b/src/test/should_work/to_sort_out/const2.lus
new file mode 100644
index 00000000..6a7728e8
--- /dev/null
+++ b/src/test/should_work/to_sort_out/const2.lus
@@ -0,0 +1,16 @@
+const
+-- Ylv6:  const2 Error : at `->' in file `const2.lus' (l.15/c.24)  : not allowed in constant expression.
+
+  e3 = true when false -> true;
+
+
+
+type
+  t1 = int;
+  t2 = t1^M;
+  t3 = t2^N;
+  t4 = t3^O;
+  t5 = t4^P;
+  t6 = t5^c10;
+  t7 = t6^O;
+  t8 = t7^O;
\ No newline at end of file
diff --git a/src/test/should_work/to_sort_out/record.lus b/src/test/should_work/to_sort_out/record.lus
new file mode 100644
index 00000000..013adc45
--- /dev/null
+++ b/src/test/should_work/to_sort_out/record.lus
@@ -0,0 +1,8 @@
+type 
+	struct = {a: int; b: {a: int; b:int}};
+	struct2 = {a: real; b: {a: real; b:real}};
+
+node record(a: struct2) returns (b: struct);
+	let
+		b = {a = a.x; b = { a = a.b.y; b = a.b.z } };
+	tel
diff --git a/src/test/should_work/to_sort_out/test.res b/src/test/should_work/to_sort_out/test.res
new file mode 100644
index 00000000..b8824568
--- /dev/null
+++ b/src/test/should_work/to_sort_out/test.res
@@ -0,0 +1,18 @@
+
+
+
+sont-ce vraiment des errors pour ces 2 fichiers la ???
+
+------------------------------------------------
+
+asservi Error : at `teta' in file `asservi.lus' (l.45/c.9)  : immediate loop found
+1 Dependance(s) error(s) found ...
+
+
+const2 Error : at `->' in file `const2.lus' (l.15/c.24)  : not allowed in constant expression.
+
+
+record Error : at `x' in file `record.lus' (l.7/c.28)  : undefined field "x"
+Error : at `y' in file `record.lus' (l.7/c.45)  : undefined field "y"
+Error : at `z' in file `record.lus' (l.7/c.56)  : undefined field "z"
+3 Type(s) error(s) found ...
diff --git a/src/test/test.res.exp b/src/test/test.res.exp
index d299cccc..717b0ad5 100644
--- a/src/test/test.res.exp
+++ b/src/test/test.res.exp
@@ -1,306 +1,148 @@
 Non-regression tests
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  newpacks.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack inter
-       export node preced
-       export const n
-       export type selType
-    init pack mainPack
-       export node preced
-    init pack pint
-       export node fby1
-       export type t
-    init pack pbool
-       export node fby1
-       export type t
-    init pack preal
-       export node fby1
-       export type t
-*** SyntaxTab.create pass 3
-   init symbol tables for pack inter
-   init symbol tables for pack mainPack
-   init symbol tables for pack pint
-   init symbol tables for pack pbool
-   init symbol tables for pack preal
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		modSimple (model) 
-		pint (pack) 
-		pbool (pack) 
-		preal (pack) 
-		inter (pack) 
-		mainPack (pack) 
-		
-	 - Raw model table: modSimple 
-	 - Raw Package table: inter mainPack pint pbool preal 
-	 - Package manager table: inter mainPack pint pbool preal 
-End of Syntax table dump. »
--- MAIN NODE: "pint::main"
-*** Dump the exported items of the packages.
- * package preal
-	Exported types:
-		type preal::t = real
-	Exported constants:
-	Exported nodes:
-		node preal::fby1 = preal::fby1(real, real) returns (real) on clock XXX
-
- * package pbool
-	Exported types:
-		type pbool::t = bool
-	Exported constants:
-	Exported nodes:
-		node pbool::fby1 = pbool::fby1(bool, bool) returns (bool) on clock XXX
-
- * package pint
-	Exported types:
-		type pint::t = int
-	Exported constants:
-	Exported nodes:
-		node pint::fby1 = pint::fby1(int, int) returns (int) on clock XXX
-
- * package mainPack
-	Exported types:
-		type mainPack::selType = inter::selType (imported)
-	Exported constants:
-		const mainPack::n = inter::n (imported)
-	Exported nodes:
-		node mainPack::preced = mainPack::preced(inter::selType) returns (inter::selType) on clock XXX
-
-		node mainPack::preced = inter::preced (imported)
- * package inter
-	Exported types:
-		type inter::t = preal::t (imported)
-		type inter::selType = inter::selType
-	Exported constants:
-		const inter::n = -4
-	Exported nodes:
-		node inter::fby1 = preal::fby1 (imported)
-		node inter::preced = inter::preced( {i : int; b : bool; r : real}) returns ( {i : int; b : bool; r : real},  {i : int; b : bool; r : real}) on clock XXX
-
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  struct0.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack dummy
-       export type Toto
-       export node bibi
-*** SyntaxTab.create pass 3
-   init symbol tables for pack dummy
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		struct0 (pack) 
-		
-	 - Raw model table: 
-	 - Raw Package table: dummy 
-	 - Package manager table: dummy 
-End of Syntax table dump. »
--- MAIN NODE: "struct0::main"
-*** Dump the exported items of the packages.
- * package dummy
-	Exported types:
-		type dummy::Toto =  {x : int (1); y : int (2)}
-	Exported constants:
-	Exported nodes:
-		node dummy::bibi = dummy::bibi(int) returns ( {x : int (1); y : int (2)}) on clock XXX
-
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  t0.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
     init pack dummy
-       export node min_4
-       export node min
-       export node min_n
-       export node max
+       export node main
+       export node main2
+       export node consensus
+       export node c8
 *** SyntaxTab.create pass 3
    init symbol tables for pack dummy
 *** SyntaxTab.create done
 *** « Syntax table dump:
  	 - Package or model list:
-		t0 (pack) 
+		consensus (pack) 
 		
 	 - Raw model table: 
 	 - Raw Package table: dummy 
 	 - Package manager table: dummy 
 End of Syntax table dump. »
--- MAIN NODE: "t0::main"
+-- MAIN NODE: "consensus::main"
 *** Dump the exported items of the packages.
  * package dummy
 	Exported types:
 	Exported constants:
 	Exported nodes:
-		node dummy::min_4 = dummy::min_n<<const 4>>(int^4) returns (int) on clock XXX
+		node dummy::main = dummy::main(bool^4) returns (bool) on clock XXX
 
-		node dummy::min = dummy::min(int, int) returns (int) on clock XXX
+		node dummy::main2 = dummy::consensus<<const 10>>(bool^10) returns (bool) on clock XXX
 
- ### skipping min_n
-		node dummy::max = extern max(int, int) returns (int)
+ ### skipping consensus
+		node dummy::c8 = dummy::consensus<<const 8>>(bool^8) returns (bool) on clock XXX
 
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  t2.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
     init pack dummy
-       export node fold_left
-       export node consensus_6_bis
-       export node consensus_6
-       export node consensus_bis
-       export node consensus
+       export node rising_edge_bis
+       export node rising_edge
 *** SyntaxTab.create pass 3
    init symbol tables for pack dummy
 *** SyntaxTab.create done
 *** « Syntax table dump:
  	 - Package or model list:
-		t2 (pack) 
+		fby (pack) 
 		
 	 - Raw model table: 
 	 - Raw Package table: dummy 
 	 - Package manager table: dummy 
 End of Syntax table dump. »
--- MAIN NODE: "t2::main"
+-- MAIN NODE: "fby::main"
 *** Dump the exported items of the packages.
  * package dummy
 	Exported types:
 	Exported constants:
 	Exported nodes:
- ### skipping fold_left
-		node dummy::consensus_6_bis = dummy::fold_left<<type bool, type bool, const 6, operator and>>(bool, bool^6) returns (bool) on clock XXX
+		node dummy::rising_edge_bis = dummy::rising_edge_bis(bool) returns (bool) on clock XXX
 
-		node dummy::consensus_6 = dummy::consensus_6(bool^6) returns (bool) on clock XXX
+		node dummy::rising_edge = dummy::rising_edge(bool) returns (bool) on clock XXX
 
- ### skipping consensus_bis
- ### skipping consensus
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  test.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack P1
-       export const y
-       export type titi
-*** SyntaxTab.create pass 3
-   init symbol tables for pack P1
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		P1 (pack) 
-		
-	 - Raw model table: 
-	 - Raw Package table: P1 
-	 - Package manager table: P1 
-End of Syntax table dump. »
--- MAIN NODE: "P1::main"
-*** Dump the exported items of the packages.
- * package P1
-	Exported types:
-		type P1::titi = P1::titi
-	Exported constants:
-		const P1::y = 3
-	Exported nodes:
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  trivial.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
     init pack dummy
+       export node ext
        export node trivial
 *** SyntaxTab.create pass 3
    init symbol tables for pack dummy
 *** SyntaxTab.create done
 *** « Syntax table dump:
  	 - Package or model list:
-		trivial (pack) 
+		func_with_body (pack) 
 		
 	 - Raw model table: 
 	 - Raw Package table: dummy 
 	 - Package manager table: dummy 
 End of Syntax table dump. »
--- MAIN NODE: "trivial::main"
+-- MAIN NODE: "func_with_body::main"
 *** Dump the exported items of the packages.
  * package dummy
 	Exported types:
 	Exported constants:
 	Exported nodes:
-		node dummy::trivial = dummy::trivial(int) returns (int) on clock XXX
+		node dummy::ext = extern ext(int) returns (int)
 
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  x.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack dummy
-       export const m
-       export const n
-       export const t
-       export const x
-       export const y
-*** SyntaxTab.create pass 3
-   init symbol tables for pack dummy
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		x (pack) 
-		
-	 - Raw model table: 
-	 - Raw Package table: dummy 
-	 - Package manager table: dummy 
-End of Syntax table dump. »
--- MAIN NODE: "x::main"
-*** Dump the exported items of the packages.
- * package dummy
-	Exported types:
-*** Error in file "x.lus", line 3, col 7 to 7, token 'm': recursion loop detected:
-   > const ref in file "x.lus", line 3, col 11 to 11, token 'x'
-   > const ref in file "x.lus", line 5, col 11 to 11, token 't'
-   > const ref in file "x.lus", line 7, col 11 to 11, token 'n'
-   > const ref in file "x.lus", line 1, col 11 to 11, token 'm'
+		node dummy::trivial = dummy::trivial(int) returns (int) on clock XXX
 
-	Exported constants:
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  consensus.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
     init pack dummy
-       export node main
-       export node main2
-       export node consensus
-       export node c8
+       export const FAILURE
+       export const TMIN
+       export const TMAX
+       export const DELTA
+       export node not_a_sauna2
+       export node Median
+       export node heater_control
+       export node min2
+       export node max2
+       export node alloftree
+       export node not_a_sauna
+       export node abs
+       export node noneoftree
+       export node oneoftree
+       export node Average
 *** SyntaxTab.create pass 3
    init symbol tables for pack dummy
 *** SyntaxTab.create done
 *** « Syntax table dump:
  	 - Package or model list:
-		consensus (pack) 
+		heater_control (pack) 
 		
 	 - Raw model table: 
 	 - Raw Package table: dummy 
 	 - Package manager table: dummy 
 End of Syntax table dump. »
--- MAIN NODE: "consensus::main"
+-- MAIN NODE: "heater_control::main"
 *** Dump the exported items of the packages.
  * package dummy
 	Exported types:
 	Exported constants:
+		const dummy::FAILURE = -999.000000
+		const dummy::TMIN = 6.000000
+		const dummy::TMAX = 9.000000
+		const dummy::DELTA = 0.500000
 	Exported nodes:
-		node dummy::main = dummy::main(bool^4) returns (bool) on clock XXX
+		node dummy::not_a_sauna2 = dummy::not_a_sauna2(real, real, real, real, bool) returns (bool) on clock XXX
 
-		node dummy::main2 = dummy::consensus<<const 10>>(bool^10) returns (bool) on clock XXX
+		node dummy::Median = dummy::Median(real, real, real) returns (real) on clock XXX
 
- ### skipping consensus
-		node dummy::c8 = dummy::consensus<<const 8>>(bool^8) returns (bool) on clock XXX
+		node dummy::heater_control = dummy::heater_control(real, real, real, real) returns (bool) on clock XXX
+
+		node dummy::min2 = dummy::min2(real, real) returns (real) on clock XXX
+
+		node dummy::max2 = dummy::max2(real, real) returns (real) on clock XXX
+
+		node dummy::not_a_sauna = dummy::not_a_sauna(real, real, real, real, bool) returns (bool) on clock XXX
+
+		node dummy::alloftree = dummy::alloftree(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::abs = dummy::abs(real) returns (real) on clock XXX
+
+		node dummy::noneoftree = dummy::noneoftree(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::Average = dummy::Average(real, real) returns (real) on clock XXX
+
+		node dummy::oneoftree = dummy::oneoftree(bool, bool, bool) returns (bool) on clock XXX
 
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  left.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
     init pack dummy
@@ -326,113 +168,6 @@ End of Syntax table dump. 
 	Exported nodes:
 		node dummy::toto = dummy::toto(bool) returns ( {a : bool^100; b : int}^3) on clock XXX
 
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  packs.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack inter
-       export node preced
-       export const n
-       export type selType
-       export enum const X
-       export enum const Y
-       export type toto
-    init pack mainPack
-       export type T
-       export enum const bleu
-       export enum const rose
-       export enum const jaune
-       export type couleurs
-       export const N
-       export const X
-       export node preced
-    init pack pint
-       export node fby1
-       export type t
-    init pack pbool
-       export node fby1
-       export type t
-    init pack preal
-       export node fby1
-       export type t
-*** SyntaxTab.create pass 3
-   init symbol tables for pack inter
-   init symbol tables for pack mainPack
-   init symbol tables for pack pint
-   init symbol tables for pack pbool
-   init symbol tables for pack preal
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		modSimple (model) 
-		pint (pack) 
-		pbool (pack) 
-		preal (pack) 
-		inter (pack) 
-		mainPack (pack) 
-		
-	 - Raw model table: modSimple 
-	 - Raw Package table: inter mainPack pint pbool preal 
-	 - Package manager table: inter mainPack pint pbool preal 
-End of Syntax table dump. »
--- MAIN NODE: "pint::main"
-*** Dump the exported items of the packages.
- * package preal
-	Exported types:
-		type preal::t = real
-	Exported constants:
-	Exported nodes:
-		node preal::fby1 = preal::fby1(real, real) returns (real) on clock XXX
-
- * package pbool
-	Exported types:
-		type pbool::t = bool
-	Exported constants:
-	Exported nodes:
-		node pbool::fby1 = pbool::fby1(bool, bool) returns (bool) on clock XXX
-
- * package pint
-	Exported types:
-		type pint::t = int
-	Exported constants:
-	Exported nodes:
-		node pint::fby1 = pint::fby1(int, int) returns (int) on clock XXX
-
- * package mainPack
-	Exported types:
-		type mainPack::selType = inter::selType (imported)
-		type mainPack::toto = inter::toto (imported)
-		type mainPack::T = int^8
-		type mainPack::couleurs = enum {mainPack::bleu, mainPack::rose, mainPack::jaune}
-	Exported constants:
-		const mainPack::bleu = mainPack::bleu
-		const mainPack::n = inter::n (imported)
-		const mainPack::jaune = mainPack::jaune
-		const mainPack::N = 8
-		const mainPack::rose = mainPack::rose
-		const mainPack::X = 8
-		const mainPack::Y = inter::Y (imported)
-	Exported nodes:
-		node mainPack::preced = mainPack::preced(inter::selType) returns (inter::selType) on clock XXX
-
-		node mainPack::preced = inter::preced (imported)
- * package inter
-	Exported types:
-		type inter::t = preal::t (imported)
-		type inter::selType = inter::selType
-		type inter::toto = enum {inter::X, inter::Y}
-	Exported constants:
-		const inter::n = -4
-		const inter::X = inter::X
-		const inter::Y = inter::Y
-	Exported nodes:
-		node inter::fby1 = preal::fby1 (imported)
-		node inter::preced = inter::preced( {i : int; b : bool; r : real}) returns ( {i : int; b : bool; r : real},  {i : int; b : bool; r : real}) on clock XXX
-
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  p.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
     init pack inter
@@ -512,92 +247,6 @@ End of Syntax table dump. 
 		node inter::fby1 = preal::fby1 (imported)
 		node inter::preced = inter::preced( {i : int; b : bool; r : real}) returns ( {i : int; b : bool; r : real},  {i : int; b : bool; r : real}) on clock XXX
 
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  t.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack dummy
-       export const A
-       export const B
-       export node map2
-       export node toto
-*** SyntaxTab.create pass 3
-   init symbol tables for pack dummy
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		t (pack) 
-		
-	 - Raw model table: 
-	 - Raw Package table: dummy 
-	 - Package manager table: dummy 
-End of Syntax table dump. »
--- MAIN NODE: "t::main"
-*** Dump the exported items of the packages.
- * package dummy
-	Exported types:
-*** Error in file "t.lus", line 33, col 1 to 1, token '+': can't eval constant: type combination error, int*int or real*real expected
-
-	Exported constants:
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  trivial.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack dummy
-       export node trivial
-*** SyntaxTab.create pass 3
-   init symbol tables for pack dummy
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		trivial (pack) 
-		
-	 - Raw model table: 
-	 - Raw Package table: dummy 
-	 - Package manager table: dummy 
-End of Syntax table dump. »
--- MAIN NODE: "trivial::main"
-*** Dump the exported items of the packages.
- * package dummy
-	Exported types:
-	Exported constants:
-	Exported nodes:
-		node dummy::trivial = dummy::trivial(int) returns (int) on clock XXX
-
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  t1.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack dummy
-       export node fold_left
-       export node consensus
-       export node bt_void
-*** SyntaxTab.create pass 3
-   init symbol tables for pack dummy
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		t1 (pack) 
-		
-	 - Raw model table: 
-	 - Raw Package table: dummy 
-	 - Package manager table: dummy 
-End of Syntax table dump. »
--- MAIN NODE: "t1::main"
-*** Dump the exported items of the packages.
- * package dummy
-	Exported types:
-	Exported constants:
-	Exported nodes:
- ### skipping fold_left
- ### skipping consensus
- ### skipping bt_void
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  onlyroll.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
     init pack dummy
@@ -748,101 +397,5350 @@ End of Syntax table dump. 
 
 		node dummy::maintain = dummy::maintain(int, bool) returns (bool) on clock XXX
 
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  heater_control.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
-    init pack dummy
-       export const FAILURE
-       export const TMIN
-       export const TMAX
-       export const DELTA
-       export node not_a_sauna2
-       export node Median
-       export node heater_control
-       export node min2
-       export node max2
-       export node alloftree
-       export node not_a_sauna
-       export node abs
-       export node noneoftree
-       export node oneoftree
-       export node Average
+    init pack inter
+       export node preced
+       export const n
+       export type selType
+    init pack mainPack
+       export node preced
+    init pack pint
+       export node fby1
+       export type t
+    init pack pbool
+       export node fby1
+       export type t
+    init pack preal
+       export node fby1
+       export type t
 *** SyntaxTab.create pass 3
-   init symbol tables for pack dummy
+   init symbol tables for pack inter
+   init symbol tables for pack mainPack
+   init symbol tables for pack pint
+   init symbol tables for pack pbool
+   init symbol tables for pack preal
 *** SyntaxTab.create done
 *** « Syntax table dump:
  	 - Package or model list:
-		heater_control (pack) 
+		modSimple (model) 
+		pint (pack) 
+		pbool (pack) 
+		preal (pack) 
+		inter (pack) 
+		mainPack (pack) 
 		
-	 - Raw model table: 
-	 - Raw Package table: dummy 
-	 - Package manager table: dummy 
+	 - Raw model table: modSimple 
+	 - Raw Package table: inter mainPack pint pbool preal 
+	 - Package manager table: inter mainPack pint pbool preal 
 End of Syntax table dump. »
--- MAIN NODE: "heater_control::main"
+-- MAIN NODE: "pint::main"
 *** Dump the exported items of the packages.
- * package dummy
+ * package preal
 	Exported types:
+		type preal::t = real
 	Exported constants:
-		const dummy::FAILURE = -999.000000
-		const dummy::TMIN = 6.000000
-		const dummy::TMAX = 9.000000
-		const dummy::DELTA = 0.500000
 	Exported nodes:
-		node dummy::not_a_sauna2 = dummy::not_a_sauna2(real, real, real, real, bool) returns (bool) on clock XXX
-
-		node dummy::Median = dummy::Median(real, real, real) returns (real) on clock XXX
+		node preal::fby1 = preal::fby1(real, real) returns (real) on clock XXX
 
-		node dummy::heater_control = dummy::heater_control(real, real, real, real) returns (bool) on clock XXX
+ * package pbool
+	Exported types:
+		type pbool::t = bool
+	Exported constants:
+	Exported nodes:
+		node pbool::fby1 = pbool::fby1(bool, bool) returns (bool) on clock XXX
 
-		node dummy::min2 = dummy::min2(real, real) returns (real) on clock XXX
+ * package pint
+	Exported types:
+		type pint::t = int
+	Exported constants:
+	Exported nodes:
+		node pint::fby1 = pint::fby1(int, int) returns (int) on clock XXX
 
-		node dummy::max2 = dummy::max2(real, real) returns (real) on clock XXX
+ * package mainPack
+	Exported types:
+		type mainPack::selType = inter::selType (imported)
+	Exported constants:
+		const mainPack::n = inter::n (imported)
+	Exported nodes:
+		node mainPack::preced = mainPack::preced(inter::selType) returns (inter::selType) on clock XXX
 
-		node dummy::not_a_sauna = dummy::not_a_sauna(real, real, real, real, bool) returns (bool) on clock XXX
+		node mainPack::preced = inter::preced (imported)
+ * package inter
+	Exported types:
+		type inter::t = preal::t (imported)
+		type inter::selType = inter::selType
+	Exported constants:
+		const inter::n = -4
+	Exported nodes:
+		node inter::fby1 = preal::fby1 (imported)
+		node inter::preced = inter::preced( {i : int; b : bool; r : real}) returns ( {i : int; b : bool; r : real},  {i : int; b : bool; r : real}) on clock XXX
 
-		node dummy::alloftree = dummy::alloftree(bool, bool, bool) returns (bool) on clock XXX
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack inter
+       export node preced
+       export const n
+       export type selType
+       export enum const X
+       export enum const Y
+       export type toto
+    init pack mainPack
+       export type T
+       export enum const bleu
+       export enum const rose
+       export enum const jaune
+       export type couleurs
+       export const N
+       export const X
+       export node preced
+    init pack pint
+       export node fby1
+       export type t
+    init pack pbool
+       export node fby1
+       export type t
+    init pack preal
+       export node fby1
+       export type t
+*** SyntaxTab.create pass 3
+   init symbol tables for pack inter
+   init symbol tables for pack mainPack
+   init symbol tables for pack pint
+   init symbol tables for pack pbool
+   init symbol tables for pack preal
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		modSimple (model) 
+		pint (pack) 
+		pbool (pack) 
+		preal (pack) 
+		inter (pack) 
+		mainPack (pack) 
+		
+	 - Raw model table: modSimple 
+	 - Raw Package table: inter mainPack pint pbool preal 
+	 - Package manager table: inter mainPack pint pbool preal 
+End of Syntax table dump. »
+-- MAIN NODE: "pint::main"
+*** Dump the exported items of the packages.
+ * package preal
+	Exported types:
+		type preal::t = real
+	Exported constants:
+	Exported nodes:
+		node preal::fby1 = preal::fby1(real, real) returns (real) on clock XXX
+
+ * package pbool
+	Exported types:
+		type pbool::t = bool
+	Exported constants:
+	Exported nodes:
+		node pbool::fby1 = pbool::fby1(bool, bool) returns (bool) on clock XXX
+
+ * package pint
+	Exported types:
+		type pint::t = int
+	Exported constants:
+	Exported nodes:
+		node pint::fby1 = pint::fby1(int, int) returns (int) on clock XXX
+
+ * package mainPack
+	Exported types:
+		type mainPack::selType = inter::selType (imported)
+		type mainPack::toto = inter::toto (imported)
+		type mainPack::T = int^8
+		type mainPack::couleurs = enum {mainPack::bleu, mainPack::rose, mainPack::jaune}
+	Exported constants:
+		const mainPack::bleu = mainPack::bleu
+		const mainPack::n = inter::n (imported)
+		const mainPack::jaune = mainPack::jaune
+		const mainPack::N = 8
+		const mainPack::rose = mainPack::rose
+		const mainPack::X = 8
+		const mainPack::Y = inter::Y (imported)
+	Exported nodes:
+		node mainPack::preced = mainPack::preced(inter::selType) returns (inter::selType) on clock XXX
+
+		node mainPack::preced = inter::preced (imported)
+ * package inter
+	Exported types:
+		type inter::t = preal::t (imported)
+		type inter::selType = inter::selType
+		type inter::toto = enum {inter::X, inter::Y}
+	Exported constants:
+		const inter::n = -4
+		const inter::X = inter::X
+		const inter::Y = inter::Y
+	Exported nodes:
+		node inter::fby1 = preal::fby1 (imported)
+		node inter::preced = inter::preced( {i : int; b : bool; r : real}) returns ( {i : int; b : bool; r : real},  {i : int; b : bool; r : real}) on clock XXX
+
+*** Error in file "should_work/Pascal/pfs.lus", line 43, col 22 to 22, token '[': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type Toto
+       export node bibi
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		struct0 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "struct0::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::Toto =  {x : int (1); y : int (2)}
+	Exported constants:
+	Exported nodes:
+		node dummy::bibi = dummy::bibi(int) returns ( {x : int (1); y : int (2)}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node min_4
+       export node min
+       export node min_n
+       export node max
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		t0 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "t0::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::min_4 = dummy::min_n<<const 4>>(int^4) returns (int) on clock XXX
+
+		node dummy::min = dummy::min(int, int) returns (int) on clock XXX
+
+ ### skipping min_n
+		node dummy::max = extern max(int, int) returns (int)
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node fold_left
+       export node consensus
+       export node bt_void
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		t1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "t1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+ ### skipping fold_left
+ ### skipping consensus
+ ### skipping bt_void
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node fold_left
+       export node consensus_6_bis
+       export node consensus_6
+       export node consensus_bis
+       export node consensus
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		t2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "t2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+ ### skipping fold_left
+		node dummy::consensus_6_bis = dummy::fold_left<<type bool, type bool, const 6, operator and>>(bool, bool^6) returns (bool) on clock XXX
+
+		node dummy::consensus_6 = dummy::consensus_6(bool^6) returns (bool) on clock XXX
+
+ ### skipping consensus_bis
+ ### skipping consensus
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack P1
+       export const y
+       export type titi
+*** SyntaxTab.create pass 3
+   init symbol tables for pack P1
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		P1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: P1 
+	 - Package manager table: P1 
+End of Syntax table dump. »
+-- MAIN NODE: "P1::main"
+*** Dump the exported items of the packages.
+ * package P1
+	Exported types:
+		type P1::titi = P1::titi
+	Exported constants:
+		const P1::y = 3
+	Exported nodes:
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node trivial
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		trivial (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "trivial::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::trivial = dummy::trivial(int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const B
+       export node map2
+       export node toto
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		t (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "t::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+		const dummy::B = [2, 2]
+	Exported nodes:
+ ### skipping map2
+		node dummy::toto = dummy::toto(bool) returns (int^2^3, int^2) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type Tacc_in
+       export type T_isElementOf_
+       export type Tacc_inShift2
+       export type iteratedStruct
+       export type Tacc_inShift
+       export const size
+       export node _isElementOf_
+       export node shift
+       export node shiftFill
+       export node selectOneStage
+       export node iterated_isElementOf_
+       export node selectElementOfRank_inArray_
+       export node produitBool
+       export node PLC
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		produitBool (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "produitBool::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::Tacc_in =  {multiplieur : bool^10; rank : int}
+		type dummy::T_isElementOf_ =  {eltToSearch : bool; iselementof : bool}
+		type dummy::iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool}
+		type dummy::Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int}
+		type dummy::Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int}
+	Exported constants:
+		const dummy::size = 10
+	Exported nodes:
+		node dummy::_isElementOf_ = dummy::_isElementOf_(bool, bool^10) returns (bool) on clock XXX
+
+		node dummy::shift = dummy::shift( {multiplieur : bool^10; rank : int}) returns (bool^20,  {multiplieur : bool^10; rank : int; actual_rank : int}) on clock XXX
+
+		node dummy::shiftFill = dummy::shiftFill( {multiplieur : bool^10; rank : int; actual_rank : int}) returns ( {multiplieur : bool^10; rank : int; actual_rank : int}, bool) on clock XXX
+
+		node dummy::selectOneStage = dummy::selectOneStage( {currentRank : int; rankToSelect : int; elementSelected : bool}, bool) returns ( {currentRank : int; rankToSelect : int; elementSelected : bool}) on clock XXX
+
+		node dummy::iterated_isElementOf_ = dummy::iterated_isElementOf_( {eltToSearch : bool; iselementof : bool}, bool) returns ( {eltToSearch : bool; iselementof : bool}) on clock XXX
+
+		node dummy::selectElementOfRank_inArray_ = dummy::selectElementOfRank_inArray_(int, bool^10) returns (bool) on clock XXX
+
+		node dummy::produitBool = dummy::produitBool(bool^10, bool^10) returns (bool^20^10) on clock XXX
+
+		node dummy::PLC = dummy::PLC( {multiplieur : bool^10; rank : int}, bool) returns (bool^20) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type T1_ARRAY
+       export type T4_STRUCT
+       export type T6_STRUCT
+       export type T3_ARRAY
+       export type t_Tacc_inShift
+       export type T5_STRUCT
+       export type t_T_isElementOf_
+       export type T7_STRUCT
+       export type T2_STRUCT
+       export type t_Tacc_in
+       export type t_Tacc_inShift2
+       export type t_iteratedStruct
+       export const c_size
+       export node n_shift
+       export node n_shiftFill
+       export node n_selectElementOfRank_inArray_
+       export node n_selectOneStage
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		shift_ludic (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "shift_ludic::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::T1_ARRAY = bool^10
+		type dummy::T4_STRUCT =  {currentRank : int; rankToSelect : int; elementSelected : bool}
+		type dummy::T6_STRUCT =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int}
+		type dummy::T3_ARRAY = bool^20
+		type dummy::t_Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int}
+		type dummy::T5_STRUCT =  {multiplieur : bool^10; rank : int}
+		type dummy::t_T_isElementOf_ =  {eltToSearch : bool; iselementof : bool}
+		type dummy::T7_STRUCT =  {eltToSearch : bool; iselementof : bool}
+		type dummy::T2_STRUCT =  {multiplieur : bool^10; rank : int; actual_rank : int}
+		type dummy::t_Tacc_in =  {multiplieur : bool^10; rank : int}
+		type dummy::t_Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int}
+		type dummy::t_iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool}
+	Exported constants:
+		const dummy::c_size = 10
+	Exported nodes:
+		node dummy::n_shift = dummy::n_shift( {multiplieur : bool^10; rank : int}) returns (bool^20) on clock XXX
+
+		node dummy::n_shiftFill = dummy::n_shiftFill( {multiplieur : bool^10; rank : int; actual_rank : int}) returns ( {multiplieur : bool^10; rank : int; actual_rank : int}, bool) on clock XXX
+
+		node dummy::n_selectElementOfRank_inArray_ = dummy::n_selectElementOfRank_inArray_(int, bool^10) returns (bool) on clock XXX
+
+		node dummy::n_selectOneStage = dummy::n_selectOneStage( {currentRank : int; rankToSelect : int; elementSelected : bool}, bool) returns ( {currentRank : int; rankToSelect : int; elementSelected : bool}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type T1_ARRAY
+       export type T4_STRUCT
+       export type T6_STRUCT
+       export type t_Tacc_inShift
+       export type T5_STRUCT
+       export type t_T_isElementOf_
+       export type T2_STRUCT
+       export type t_Tacc_in
+       export type t_Tacc_inShift2
+       export type T3_STRUCT
+       export type t_iteratedStruct
+       export const c_size
+       export node n_shiftFill
+       export node n_selectElementOfRank_inArray_
+       export node n_selectOneStage
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		shiftFill_ludic (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "shiftFill_ludic::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::T1_ARRAY = bool^10
+		type dummy::T4_STRUCT =  {multiplieur : bool^10; rank : int}
+		type dummy::T6_STRUCT =  {eltToSearch : bool; iselementof : bool}
+		type dummy::t_Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int}
+		type dummy::T5_STRUCT =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int}
+		type dummy::t_T_isElementOf_ =  {eltToSearch : bool; iselementof : bool}
+		type dummy::T2_STRUCT =  {multiplieur : bool^10; rank : int; actual_rank : int}
+		type dummy::t_Tacc_in =  {multiplieur : bool^10; rank : int}
+		type dummy::t_Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int}
+		type dummy::T3_STRUCT =  {currentRank : int; rankToSelect : int; elementSelected : bool}
+		type dummy::t_iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool}
+	Exported constants:
+		const dummy::c_size = 10
+	Exported nodes:
+		node dummy::n_shiftFill = dummy::n_shiftFill( {multiplieur : bool^10; rank : int; actual_rank : int}) returns ( {multiplieur : bool^10; rank : int; actual_rank : int}, bool) on clock XXX
+
+		node dummy::n_selectElementOfRank_inArray_ = dummy::n_selectElementOfRank_inArray_(int, bool^10) returns (bool) on clock XXX
+
+		node dummy::n_selectOneStage = dummy::n_selectOneStage( {currentRank : int; rankToSelect : int; elementSelected : bool}, bool) returns ( {currentRank : int; rankToSelect : int; elementSelected : bool}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node reduced
+       export node filled
+       export node FillFollowedByRed
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		FillFollowedByRed (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "FillFollowedByRed::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::reduced = dummy::reduced(bool, real) returns (bool) on clock XXX
+
+		node dummy::filled = dummy::filled(real) returns (real, real) on clock XXX
+
+		node dummy::FillFollowedByRed = dummy::FillFollowedByRed(real) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type T_fibo
+       export node iterFibo
+       export node fibo
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		iterFibo (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "iterFibo::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::T_fibo = int^2
+	Exported constants:
+	Exported nodes:
+		node dummy::iterFibo = dummy::iterFibo(int, int) returns (int^10) on clock XXX
+
+		node dummy::fibo = dummy::fibo(int^2) returns (int^2, int) on clock XXX
+
+*** Error in file "should_work/lionel/matrice.lus", line 15, col 22 to 22, token '+': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const size
+       export node oneStep_pipe
+       export node pipeline
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		pipeline (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "pipeline::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+		const dummy::size = 10
+	Exported nodes:
+		node dummy::oneStep_pipe = dummy::oneStep_pipe(bool, bool) returns (bool, bool) on clock XXX
+
+		node dummy::pipeline = dummy::pipeline(bool^10) returns (bool^10) on clock XXX
+
+*** Error in file "should_work/lionel/triSel.lus", line 27, col 36 to 36, token ',': syntax error
+
+*** Error in file "should_work/lionel/Gyroscope.lus", line 48, col 1 to 1, token '%': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type bool_arrays
+       export type int_arrays
+       export type struct_fill_bool
+       export type struct_max
+       export const taille
+       export node fill_bool
+       export node max
+       export node calculs_max
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		calculs_max (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "calculs_max::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::bool_arrays = bool^10
+		type dummy::int_arrays = int^10
+		type dummy::struct_fill_bool =  {imax1 : int; imax2 : int; icourant : int}
+		type dummy::struct_max =  {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int}
+	Exported constants:
+		const dummy::taille = 10
+	Exported nodes:
+		node dummy::max = dummy::max( {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int}, int) returns ( {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int}) on clock XXX
+
+		node dummy::fill_bool = dummy::fill_bool( {imax1 : int; imax2 : int; icourant : int}) returns ( {imax1 : int; imax2 : int; icourant : int}, bool) on clock XXX
+
+		node dummy::calculs_max = dummy::calculs_max(int^10) returns (bool^10) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type tabType
+       export type cell_accu
+       export const size
+       export node oneCell
+       export node prop1_iter
+       export node deSimone
+       export node prop1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		deSimone (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "deSimone::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::tabType = bool^10
+		type dummy::cell_accu =  {token : bool; grant : bool}
+	Exported constants:
+		const dummy::size = 10
+	Exported nodes:
+		node dummy::oneCell = dummy::oneCell( {token : bool; grant : bool}, bool) returns ( {token : bool; grant : bool}, bool) on clock XXX
+
+		node dummy::prop1_iter = dummy::prop1_iter(int, bool) returns (int) on clock XXX
+
+		node dummy::deSimone = dummy::deSimone(bool, bool^10) returns (bool^10) on clock XXX
+
+		node dummy::prop1 = dummy::prop1(bool^10) returns (bool) on clock XXX
+
+*** Error in file "should_work/lionel/mapiter.lus", line 42, col 25 to 25, token '=': syntax error
+
+*** Error in file "should_work/lionel/arrays.lus", line 16, col 23 to 23, token '+': syntax error
+
+*** Error in file "should_work/lionel/matrice2.lus", line 6, col 22 to 22, token '+': syntax error
+
+*** Error in file "should_work/lionel/minus.lus", line 8, col 22 to 22, token ',': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type moyenne_accu
+       export const size
+       export node moyenne_step
+       export node moyenne
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		moyenne (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "moyenne::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::moyenne_accu =  {sum : real; moyenne : real; rank : real}
+	Exported constants:
+		const dummy::size = 10
+	Exported nodes:
+		node dummy::moyenne_step = dummy::moyenne_step( {sum : real; moyenne : real; rank : real}, real) returns ( {sum : real; moyenne : real; rank : real}) on clock XXX
+
+		node dummy::moyenne = dummy::moyenne(real^10) returns (real) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type INTNBC
+       export type T_EntreeGlob
+       export type INTNBG
+       export type T_ComChg
+       export type T_InfoGenIndiv
+       export type T_EtatCharge
+       export type T_InfoChgGlob
+       export type T_InfoChgIndiv
+       export type T_InfoGenGlob
+       export const EC_LESTAGE
+       export const COM_ON
+       export const EC_OFF
+       export const COM_OFF
+       export const EC_NON_CTRL
+       export const EC_DELESTAGE
+       export const EC_ON
+       export const NBC
+       export const NBG
+       export const COM_ERR
+       export node copie
+       export node egal_indice
+       export node extract_tab_info_gen_indiv
+       export node extract_tab_info_chg_indiv
+       export node essai_traite_gen
+       export node fusion_com
+       export node extrCharge
+       export node essai2
+       export node traite_genCore_itere
+       export node essai3
+       export node trChItere
+       export node fusion_tab_com
+       export node traite_gen_core
+       export node extract_info_chg_glob
+       export node int2InfoGenIndiv
+       export node traite_gen
+       export node extract_info_gen_glob
+       export node traite_charge
+       export node int2InfoChgIndiv
+       export node extrGen
+       export node traiteGen
+       export node fusion_une_com
+       export node incr_acc
+       export node id
+       export node normal
+       export node traiteChg
+       export node traite_gen_bis
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		normal (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "normal::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::INTNBC = int^20
+		type dummy::T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}
+		type dummy::INTNBG = int^4
+		type dummy::T_ComChg = int
+		type dummy::T_InfoGenIndiv =  {mesure_gen : int}
+		type dummy::T_EtatCharge = int
+		type dummy::T_InfoChgGlob =  {chg2gen : int^20}
+		type dummy::T_InfoChgIndiv =  {mesure_chg : int}
+		type dummy::T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20}
+	Exported constants:
+		const dummy::EC_LESTAGE = 3
+		const dummy::COM_ON = 1
+		const dummy::EC_OFF = 1
+		const dummy::COM_OFF = 2
+		const dummy::EC_NON_CTRL = 2
+		const dummy::EC_DELESTAGE = 4
+		const dummy::EC_ON = 0
+		const dummy::NBC = 20
+		const dummy::NBG = 4
+		const dummy::COM_ERR = 0
+	Exported nodes:
+		node dummy::extract_tab_info_chg_indiv = dummy::extract_tab_info_chg_indiv( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {mesure_chg : int}^20) on clock XXX
+
+		node dummy::extract_tab_info_gen_indiv = dummy::extract_tab_info_gen_indiv( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {mesure_gen : int}^4) on clock XXX
+
+		node dummy::egal_indice = dummy::egal_indice(int, int) returns (bool) on clock XXX
+
+		node dummy::copie = dummy::copie(int) returns (int, int) on clock XXX
+
+		node dummy::essai_traite_gen = dummy::essai_traite_gen(int,  {elt_bidon : int; chg2gen : int^20}) returns (bool^20) on clock XXX
+
+		node dummy::fusion_com = dummy::fusion_com(int^20^4, bool^20^4) returns (int^20) on clock XXX
+
+		node dummy::traite_genCore_itere = dummy::traite_genCore_itere(int, bool, int) returns (int, int) on clock XXX
+
+		node dummy::essai2 = dummy::essai2(int^20,  {elt_bidon : int; chg2gen : int^20}) returns (bool^20) on clock XXX
+
+		node dummy::extrCharge = dummy::extrCharge( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {mesure_chg : int}^20,  {chg2gen : int^20}^20) on clock XXX
+
+		node dummy::fusion_tab_com = dummy::fusion_tab_com(int^20, int^20, bool^20) returns (int^20) on clock XXX
+
+		node dummy::trChItere = dummy::trChItere(int, int) returns (int) on clock XXX
+
+		node dummy::essai3 = dummy::essai3(int^20,  {elt_bidon : int; chg2gen : int^20}) returns (bool^20) on clock XXX
+
+		node dummy::extract_info_chg_glob = dummy::extract_info_chg_glob( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {chg2gen : int^20}) on clock XXX
+
+		node dummy::traite_gen_core = dummy::traite_gen_core(int,  {mesure_gen : int},  {elt_bidon : int; chg2gen : int^20}, int^20, bool^20) returns (int^20) on clock XXX
+
+		node dummy::int2InfoGenIndiv = dummy::int2InfoGenIndiv(int) returns ( {mesure_gen : int}) on clock XXX
+
+		node dummy::traite_gen = dummy::traite_gen(int,  {mesure_gen : int},  {elt_bidon : int; chg2gen : int^20}, int^20) returns (int^20, bool^20) on clock XXX
+
+		node dummy::extract_info_gen_glob = dummy::extract_info_gen_glob( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {elt_bidon : int; chg2gen : int^20}) on clock XXX
+
+		node dummy::traite_charge = dummy::traite_charge( {mesure_chg : int},  {chg2gen : int^20}) returns (int) on clock XXX
+
+		node dummy::int2InfoChgIndiv = dummy::int2InfoChgIndiv(int) returns ( {mesure_chg : int}) on clock XXX
+
+		node dummy::extrGen = dummy::extrGen( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {mesure_gen : int}^4,  {elt_bidon : int; chg2gen : int^20}^4, int^4) on clock XXX
+
+		node dummy::fusion_une_com = dummy::fusion_une_com(int, int, bool) returns (int) on clock XXX
+
+		node dummy::traiteGen = dummy::traiteGen(int^4,  {mesure_gen : int}^4,  {elt_bidon : int; chg2gen : int^20}^4, int^20) returns (int^20^4, bool^20^4) on clock XXX
+
+		node dummy::incr_acc = dummy::incr_acc(int) returns (int, int) on clock XXX
+
+		node dummy::id = dummy::id(int) returns (int) on clock XXX
+
+		node dummy::normal = dummy::normal( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns (int^20) on clock XXX
+
+		node dummy::traite_gen_bis = dummy::traite_gen_bis(int,  {elt_bidon : int; chg2gen : int^20}) returns (bool^20) on clock XXX
+
+		node dummy::traiteChg = dummy::traiteChg( {mesure_chg : int}^20,  {chg2gen : int^20}^20) returns (int^20) on clock XXX
+
+*** Error in file "should_work/lionel/predefOp.lus", line 61, col 25 to 26, token '=>': syntax error
+
+*** Error in file "should_work/lionel/redIf.lus", line 3, col 14 to 14, token ',': syntax error
+
+*** Error in file "should_work/lionel/simpleRed.lus", line 6, col 15 to 15, token '+': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type INTNBC
+       export type T_EntreeGlob
+       export type INTNBG
+       export type T_ComChg
+       export type T_InfoGenIndiv
+       export type BOOLNBC
+       export type T_EtatCharge
+       export type T_InfoChgGlob
+       export type T_InfoChgIndiv
+       export type T_ComChgNBC
+       export type T_InfoGenGlob
+       export const EC_LESTAGE
+       export const COM_ON
+       export const EC_OFF
+       export const COM_OFF
+       export const EC_NON_CTRL
+       export const EC_DELESTAGE
+       export const EC_ON
+       export const NBC
+       export const NBG
+       export const COM_ERR
+       export node copie
+       export node egal_indice
+       export node extract_tab_info_gen_indiv
+       export node extract_tab_info_chg_indiv
+       export node fusion_com
+       export node extrCharge
+       export node traite_genCore_itere
+       export node trChItere
+       export node fusion_tab_com
+       export node traite_gen_core
+       export node extract_info_chg_glob
+       export node int2InfoGenIndiv
+       export node traite_gen
+       export node extract_info_gen_glob
+       export node traite_charge
+       export node testSilus
+       export node int2InfoChgIndiv
+       export node extrGen
+       export node traiteGen
+       export node fusion_une_com
+       export node incr_acc
+       export node id
+       export node traiteChg
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		testSilus (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "testSilus::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::INTNBC = int^20
+		type dummy::T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}
+		type dummy::INTNBG = int^4
+		type dummy::T_ComChg = int
+		type dummy::T_InfoGenIndiv =  {mesure_gen : int}
+		type dummy::BOOLNBC = bool^20
+		type dummy::T_EtatCharge = int
+		type dummy::T_InfoChgGlob =  {chg2gen : int^20}
+		type dummy::T_InfoChgIndiv =  {mesure_chg : int}
+		type dummy::T_ComChgNBC = int^20
+		type dummy::T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20}
+	Exported constants:
+		const dummy::EC_LESTAGE = 3
+		const dummy::COM_ON = 1
+		const dummy::EC_OFF = 1
+		const dummy::COM_OFF = 2
+		const dummy::EC_NON_CTRL = 2
+		const dummy::EC_DELESTAGE = 4
+		const dummy::EC_ON = 0
+		const dummy::NBC = 20
+		const dummy::NBG = 4
+		const dummy::COM_ERR = 0
+	Exported nodes:
+		node dummy::extract_tab_info_chg_indiv = dummy::extract_tab_info_chg_indiv( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {mesure_chg : int}^20) on clock XXX
+
+		node dummy::extract_tab_info_gen_indiv = dummy::extract_tab_info_gen_indiv( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {mesure_gen : int}^4) on clock XXX
+
+		node dummy::egal_indice = dummy::egal_indice(int, int) returns (bool) on clock XXX
+
+		node dummy::copie = dummy::copie(int) returns (int, int) on clock XXX
+
+		node dummy::fusion_com = dummy::fusion_com(int^20^4, bool^20^4) returns (int^20) on clock XXX
+
+		node dummy::traite_genCore_itere = dummy::traite_genCore_itere(int, bool, int) returns (int, int) on clock XXX
+
+		node dummy::extrCharge = dummy::extrCharge( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {mesure_chg : int}^20,  {chg2gen : int^20}^20) on clock XXX
+
+		node dummy::fusion_tab_com = dummy::fusion_tab_com(int^20, int^20, bool^20) returns (int^20) on clock XXX
+
+		node dummy::trChItere = dummy::trChItere(int, int) returns (int) on clock XXX
+
+		node dummy::extract_info_chg_glob = dummy::extract_info_chg_glob( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {chg2gen : int^20}) on clock XXX
+
+		node dummy::traite_gen_core = dummy::traite_gen_core(int,  {mesure_gen : int},  {elt_bidon : int; chg2gen : int^20}, int^20, bool^20) returns (int^20) on clock XXX
+
+		node dummy::int2InfoGenIndiv = dummy::int2InfoGenIndiv(int) returns ( {mesure_gen : int}) on clock XXX
+
+		node dummy::traite_gen = dummy::traite_gen(int,  {mesure_gen : int},  {elt_bidon : int; chg2gen : int^20}, int^20) returns (int^20, bool^20) on clock XXX
+
+		node dummy::extract_info_gen_glob = dummy::extract_info_gen_glob( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {elt_bidon : int; chg2gen : int^20}) on clock XXX
+
+		node dummy::traite_charge = dummy::traite_charge( {mesure_chg : int},  {chg2gen : int^20}) returns (int) on clock XXX
+
+		node dummy::testSilus = dummy::testSilus( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns (int^20) on clock XXX
+
+		node dummy::int2InfoChgIndiv = dummy::int2InfoChgIndiv(int) returns ( {mesure_chg : int}) on clock XXX
+
+		node dummy::extrGen = dummy::extrGen( {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}) returns ( {mesure_gen : int}^4,  {elt_bidon : int; chg2gen : int^20}^4, int^4) on clock XXX
+
+		node dummy::fusion_une_com = dummy::fusion_une_com(int, int, bool) returns (int) on clock XXX
+
+		node dummy::traiteGen = dummy::traiteGen(int^4,  {mesure_gen : int}^4,  {elt_bidon : int; chg2gen : int^20}^4, int^20) returns (int^20^4, bool^20^4) on clock XXX
+
+		node dummy::incr_acc = dummy::incr_acc(int) returns (int, int) on clock XXX
+
+		node dummy::id = dummy::id(int) returns (int) on clock XXX
+
+		node dummy::traiteChg = dummy::traiteChg( {mesure_chg : int}^20,  {chg2gen : int^20}^20) returns (int^20) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node bad_call02
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		bad_call02 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "bad_call02::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::bad_call02 = dummy::bad_call02(int, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node titi
+       export node call02
+       export node toto
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		call02 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "call02::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+*** Error in file "should_work/call/call02.lus", line 2, col 13 to 23, token 'Lustre::and': unknown node
+
+	Exported nodes:
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node call07
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		call07 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "call07::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::call07 = dummy::call07(bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node call01
+       export node toto
+       export node momo
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		call01 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "call01::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+*** Error in file "should_work/call/call01.lus", line 2, col 13 to 23, token 'Lustre::and': unknown node
+
+	Exported nodes:
+		node dummy::call01 = dummy::call01(bool, bool) returns (bool) on clock XXX
+
+*** Error in file "should_work/call/call03.lus", line 2, col 18 to 19, token 'or': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node tutu
+       export node titi
+       export node call04
+       export node toto
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		call04 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "call04::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+*** Error in file "should_work/call/call04.lus", line 4, col 13 to 15, token 'map': unknown node
+
+	Exported nodes:
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node call05
+       export node momo
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		call05 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "call05::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::call05 = dummy::call05(bool, bool) returns (bool) on clock XXX
+
+		node dummy::momo = extern momo(bool, bool) returns (bool)
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node call06
+       export node bip
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		call06 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "call06::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::call06 = dummy::call06(bool, bool) returns (bool, bool) on clock XXX
+
+		node dummy::bip = extern bip(bool, bool) returns (bool, bool)
+
+*** Error in file "should_work/packEnvTest/contractForElementSelectionInArray/main.lus", line 3, col 45 to 45, token '=': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node equals
+       export node gt
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		noeudsIndependants (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "noeudsIndependants::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::equals = dummy::equals(int, int) returns (bool) on clock XXX
+
+		node dummy::gt = dummy::gt(int, int) returns (bool) on clock XXX
+
+*** Error in file "should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus", line 9, col 50 to 50, token '0': syntax error
+
+*** Error in file "should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus", line 96, col 1 to 1, token '%': syntax error
+
+*** Error in file "should_work/packEnvTest/contractForElementSelectionInArray/tri.lus", line 181, col 74 to 74, token ';': syntax error
+
+*** Error in file "should_work/packEnvTest/Condact.lus", line 22, col 3 to 3, token '=': syntax error
+
+*** Error in file "should_work/packEnvTest/modelInst.lus", line 28, col 3 to 9, token 'package': syntax error
+
+*** Error in file "should_work/packEnvTest/packages2.lus", line 63, col 1 to 4, token 'node': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack inter
+       export node preced
+       export const n
+       export type selType
+    init pack mainPack
+       export node preced
+    init pack pint
+       export node fby1
+       export type t
+    init pack pbool
+       export node fby1
+       export type t
+    init pack preal
+       export node fby1
+       export type t
+*** SyntaxTab.create pass 3
+   init symbol tables for pack inter
+   init symbol tables for pack mainPack
+   init symbol tables for pack pint
+   init symbol tables for pack pbool
+   init symbol tables for pack preal
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		modSimple (model) 
+		pint (pack) 
+		pbool (pack) 
+		preal (pack) 
+		inter (pack) 
+		mainPack (pack) 
+		
+	 - Raw model table: modSimple 
+	 - Raw Package table: inter mainPack pint pbool preal 
+	 - Package manager table: inter mainPack pint pbool preal 
+End of Syntax table dump. »
+-- MAIN NODE: "pint::main"
+*** Dump the exported items of the packages.
+ * package preal
+	Exported types:
+		type preal::t = real
+	Exported constants:
+	Exported nodes:
+		node preal::fby1 = preal::fby1(real, real) returns (real) on clock XXX
+
+ * package pbool
+	Exported types:
+		type pbool::t = bool
+	Exported constants:
+	Exported nodes:
+		node pbool::fby1 = pbool::fby1(bool, bool) returns (bool) on clock XXX
+
+ * package pint
+	Exported types:
+		type pint::t = int
+	Exported constants:
+	Exported nodes:
+		node pint::fby1 = pint::fby1(int, int) returns (int) on clock XXX
+
+ * package mainPack
+	Exported types:
+		type mainPack::selType = inter::selType (imported)
+	Exported constants:
+		const mainPack::n = inter::n (imported)
+	Exported nodes:
+		node mainPack::preced = mainPack::preced(inter::selType) returns (inter::selType) on clock XXX
+
+		node mainPack::preced = inter::preced (imported)
+ * package inter
+	Exported types:
+		type inter::t = preal::t (imported)
+		type inter::selType = inter::selType
+	Exported constants:
+		const inter::n = -4
+	Exported nodes:
+		node inter::fby1 = preal::fby1 (imported)
+		node inter::preced = inter::preced( {i : int; b : bool; r : real}) returns ( {i : int; b : bool; r : real},  {i : int; b : bool; r : real}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node bob
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		bob (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "bob::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::bob = dummy::bob(bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node def
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		def (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "def::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::def = dummy::def(bool) returns (bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node trueNode
+       export node ex
+       export node id
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		ex (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "ex::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::trueNode = dummy::trueNode(bool) returns (bool) on clock XXX
+
+		node dummy::ex = dummy::ex(bool) returns (bool) on clock XXX
+
+		node dummy::id = dummy::id(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const n
+       export node iter
+       export node filled
+       export node plus
+       export node mapped
+       export node garcia
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		iter (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "iter::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+		const dummy::n = 5
+	Exported nodes:
+		node dummy::iter = dummy::iter(int) returns (int^5, int, int^5, int) on clock XXX
+
+		node dummy::filled = dummy::filled(int) returns (int, int) on clock XXX
+
+		node dummy::plus = dummy::plus(int, int) returns (int) on clock XXX
+
+		node dummy::mapped = dummy::mapped(int) returns (int) on clock XXX
+
+		node dummy::garcia = dummy::garcia(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node redduced
+       export node iterate
+       export node filled
+       export node mapped
+       export node map_redduced
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		iterate (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "iterate::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::iterate = dummy::iterate(int^10, int^10) returns (int^10, int^10, int^10, int, int^10, int^10, int, int^10, int^10) on clock XXX
+
+		node dummy::redduced = dummy::redduced(int, int, int) returns (int) on clock XXX
+
+		node dummy::filled = dummy::filled(int) returns (int, int, int) on clock XXX
+
+		node dummy::mapped = dummy::mapped(int, int) returns (int, int) on clock XXX
+
+		node dummy::map_redduced = dummy::map_redduced(int, int, int) returns (int, int, int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node Propriete
+       export node lecteur
+       export node Controleur
+       export node Environnement
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		lecteur (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "lecteur::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::Propriete = dummy::Propriete(int) returns (bool) on clock XXX
+
+		node dummy::lecteur = dummy::lecteur(int) returns (bool) on clock XXX
+
+		node dummy::Controleur = dummy::Controleur(int) returns (int, bool, bool) on clock XXX
+
+		node dummy::Environnement = dummy::Environnement(int, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node implies
+       export node after
+       export node lucky
+       export node stable
+       export node once_from_to
+       export node once_since
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		lucky (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "lucky::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::implies = dummy::implies(bool, bool) returns (bool) on clock XXX
+
+		node dummy::lucky = dummy::lucky(int, bool) returns (bool) on clock XXX
+
+		node dummy::after = dummy::after(bool) returns (bool) on clock XXX
+
+		node dummy::stable = dummy::stable(bool) returns (int) on clock XXX
+
+		node dummy::once_from_to = dummy::once_from_to(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::once_since = dummy::once_since(bool, bool) returns (bool) on clock XXX
+
+*** Error in file "should_work/fab_test/morel.lus", line 20, col 9 to 10, token '.2': syntax error
+
+*** Error in file "should_work/fab_test/morel2.lus", line 20, col 9 to 10, token '.2': syntax error
+
+*** Error in file "should_work/fab_test/morel3.lus", line 20, col 9 to 10, token '.2': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node noAlarm
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		noAlarm (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "noAlarm::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::noAlarm = dummy::noAlarm(bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node notTwo
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		notTwo (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "notTwo::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::notTwo = dummy::notTwo(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const NRminP
+       export const NRmaxP
+       export const NRminR
+       export const DELTA_PITCH
+       export const NRmaxR
+       export const FAIL_SAFE_PITCH_VALUE
+       export const DELTA_YAW
+       export const HORminP
+       export const NRminY
+       export const XFAIL_SAFE_ROLL_VALUE
+       export const HORmaxP
+       export const HORminR
+       export const NRmaxY
+       export const HORmaxR
+       export const CROSS_CH_TOL_PITCH
+       export const HORminY
+       export const FAIL_SAFE_YAW_VALUE
+       export const HORmaxY
+       export const OneSecond
+       export const FAIL_SAFE_ROLL_VALUE
+       export const DELTA_ROLL
+       export const TIME_ROLL
+       export const CROSS_CH_TOL_ROLL
+       export const TIME5
+       export const BID_LAST
+       export const SAFE_COUNTER_TIME
+       export const BID_VAL
+       export const TIME_CROSS_ROLL
+       export const CROSS_CH_TOL_YAW
+       export node Calculate
+       export node onlyroll
+       export node Median
+       export node oneoffour
+       export node MedianValue3
+       export node Monitor
+       export node Allocator
+       export node Channel
+       export node min2
+       export node min4
+       export node max2
+       export node max4
+       export node OlympicAverage
+       export node InHardoverRange
+       export node twooffour
+       export node noneof
+       export node threeoffour
+       export node InNominalRange
+       export node FailDetect
+       export node abs
+       export node Average2
+       export node Average
+       export node maintain
+       export node values_nok
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		onlyroll (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "onlyroll::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+		const dummy::NRminP = -5.100000
+		const dummy::NRminR = -25.300000
+		const dummy::NRmaxP = 5.100000
+		const dummy::DELTA_PITCH = 3.000000
+		const dummy::NRmaxR = 25.300000
+		const dummy::FAIL_SAFE_PITCH_VALUE = 4.000000
+		const dummy::DELTA_YAW = 2.730000
+		const dummy::NRminY = -5.000000
+		const dummy::HORminP = -57.000000
+		const dummy::XFAIL_SAFE_ROLL_VALUE = 1.100000
+		const dummy::NRmaxY = 5.000000
+		const dummy::HORminR = -285.000000
+		const dummy::HORmaxP = 57.000000
+		const dummy::CROSS_CH_TOL_PITCH = 10.100000
+		const dummy::HORmaxR = 285.000000
+		const dummy::FAIL_SAFE_YAW_VALUE = 4.000000
+		const dummy::HORminY = -57.000000
+		const dummy::DELTA_ROLL = 14.900000
+		const dummy::FAIL_SAFE_ROLL_VALUE = 1.000000
+		const dummy::OneSecond = 10
+		const dummy::HORmaxY = 57.000000
+		const dummy::TIME_ROLL = 3
+		const dummy::CROSS_CH_TOL_ROLL = 51.000000
+		const dummy::BID_LAST = 2.200000
+		const dummy::TIME5 = 4
+		const dummy::SAFE_COUNTER_TIME = 3
+		const dummy::BID_VAL = 3.300000
+		const dummy::CROSS_CH_TOL_YAW = 10.000000
+		const dummy::TIME_CROSS_ROLL = 3
+	Exported nodes:
+		node dummy::Calculate = dummy::Calculate(real, real, real, real, bool, bool, bool, bool) returns (real) on clock XXX
+
+		node dummy::onlyroll = dummy::onlyroll(real, real, real, real, real, real, real, real, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool) returns (real, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, int, int, int, int) on clock XXX
+
+		node dummy::Median = dummy::Median(real, real, real, real, bool, bool, bool, bool) returns (real) on clock XXX
+
+		node dummy::oneoffour = dummy::oneoffour(bool, bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::MedianValue3 = dummy::MedianValue3(real, real, real) returns (real) on clock XXX
+
+		node dummy::Monitor = dummy::Monitor(real, real, bool) returns (real, bool) on clock XXX
+
+		node dummy::Allocator = dummy::Allocator(bool, bool, bool, bool, bool) returns (bool, bool, bool, bool) on clock XXX
+
+		node dummy::Channel = dummy::Channel(bool, bool, bool, real, real, bool, real, real, real, bool, bool, bool, bool) returns (real, bool, bool, bool, bool, int) on clock XXX
+
+		node dummy::min2 = dummy::min2(real, real) returns (real) on clock XXX
+
+		node dummy::max2 = dummy::max2(real, real) returns (real) on clock XXX
+
+		node dummy::min4 = dummy::min4(real, real, real, real) returns (real) on clock XXX
+
+		node dummy::OlympicAverage = dummy::OlympicAverage(real, real, real, real) returns (real) on clock XXX
+
+		node dummy::max4 = dummy::max4(real, real, real, real) returns (real) on clock XXX
+
+		node dummy::InHardoverRange = dummy::InHardoverRange(real) returns (bool) on clock XXX
+
+		node dummy::noneof = dummy::noneof(bool, bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::twooffour = dummy::twooffour(bool, bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::threeoffour = dummy::threeoffour(bool, bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::InNominalRange = dummy::InNominalRange(real) returns (bool) on clock XXX
+
+		node dummy::FailDetect = dummy::FailDetect(bool, real, bool, bool, bool, real, real, real, bool, bool, bool, bool) returns (bool, bool, int, bool) on clock XXX
+
+		node dummy::abs = dummy::abs(real) returns (real) on clock XXX
+
+		node dummy::Average2 = dummy::Average2(real, real) returns (real) on clock XXX
+
+		node dummy::Average = dummy::Average(real, real, real, real, bool, bool, bool, bool) returns (real) on clock XXX
+
+		node dummy::values_nok = dummy::values_nok(bool, bool, bool, real, real, real, real) returns (bool) on clock XXX
+
+		node dummy::maintain = dummy::maintain(int, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const NRminP
+       export const NRmaxP
+       export const NRminR
+       export const DELTA_PITCH
+       export const NRmaxR
+       export const FAIL_SAFE_PITCH_VALUE
+       export const DELTA_YAW
+       export const HORminP
+       export const NRminY
+       export const XFAIL_SAFE_ROLL_VALUE
+       export const HORmaxP
+       export const HORminR
+       export const NRmaxY
+       export const HORmaxR
+       export const CROSS_CH_TOL_PITCH
+       export const HORminY
+       export const FAIL_SAFE_YAW_VALUE
+       export const HORmaxY
+       export const OneSecond
+       export const FAIL_SAFE_ROLL_VALUE
+       export const DELTA_ROLL
+       export const TIME_ROLL
+       export const CROSS_CH_TOL_ROLL
+       export const TIME5
+       export const BID_LAST
+       export const SAFE_COUNTER_TIME
+       export const BID_VAL
+       export const TIME_CROSS_ROLL
+       export const CROSS_CH_TOL_YAW
+       export node Calculate
+       export node Median
+       export node onlyroll2
+       export node oneoffour
+       export node MedianValue3
+       export node Monitor
+       export node Allocator
+       export node Channel
+       export node min2
+       export node min4
+       export node max2
+       export node max4
+       export node OlympicAverage
+       export node InHardoverRange
+       export node twooffour
+       export node noneof
+       export node threeoffour
+       export node InNominalRange
+       export node FailDetect
+       export node abs
+       export node Average2
+       export node Average
+       export node maintain
+       export node values_nok
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		onlyroll2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "onlyroll2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+		const dummy::NRminP = -5.100000
+		const dummy::NRminR = -25.300000
+		const dummy::NRmaxP = 5.100000
+		const dummy::DELTA_PITCH = 3.000000
+		const dummy::NRmaxR = 25.300000
+		const dummy::FAIL_SAFE_PITCH_VALUE = 4.000000
+		const dummy::DELTA_YAW = 2.730000
+		const dummy::NRminY = -5.000000
+		const dummy::HORminP = -57.000000
+		const dummy::XFAIL_SAFE_ROLL_VALUE = 1.100000
+		const dummy::NRmaxY = 5.000000
+		const dummy::HORminR = -285.000000
+		const dummy::HORmaxP = 57.000000
+		const dummy::CROSS_CH_TOL_PITCH = 10.100000
+		const dummy::HORmaxR = 285.000000
+		const dummy::FAIL_SAFE_YAW_VALUE = 4.000000
+		const dummy::HORminY = -57.000000
+		const dummy::DELTA_ROLL = 14.900000
+		const dummy::FAIL_SAFE_ROLL_VALUE = 1.000000
+		const dummy::OneSecond = 10
+		const dummy::HORmaxY = 57.000000
+		const dummy::TIME_ROLL = 3
+		const dummy::CROSS_CH_TOL_ROLL = 51.000000
+		const dummy::BID_LAST = 2.200000
+		const dummy::TIME5 = 4
+		const dummy::SAFE_COUNTER_TIME = 3
+		const dummy::BID_VAL = 3.300000
+		const dummy::CROSS_CH_TOL_YAW = 10.000000
+		const dummy::TIME_CROSS_ROLL = 3
+	Exported nodes:
+		node dummy::Calculate = dummy::Calculate(real, real, real, real, bool, bool, bool, bool) returns (real) on clock XXX
+
+		node dummy::Median = dummy::Median(real, real, real, real, bool, bool, bool, bool) returns (real) on clock XXX
+
+		node dummy::onlyroll2 = dummy::onlyroll2(real, real, real, real, real, real, real, real, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool) returns (real, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, int, int, int, int) on clock XXX
+
+		node dummy::oneoffour = dummy::oneoffour(bool, bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::MedianValue3 = dummy::MedianValue3(real, real, real) returns (real) on clock XXX
+
+		node dummy::Monitor = dummy::Monitor(real, real, bool) returns (real, bool) on clock XXX
+
+		node dummy::Allocator = dummy::Allocator(bool, bool, bool, bool, bool) returns (bool, bool, bool, bool) on clock XXX
+
+		node dummy::Channel = dummy::Channel(bool, bool, bool, real, real, bool, real, real, real, bool, bool, bool, bool) returns (real, bool, bool, bool, bool, int) on clock XXX
+
+		node dummy::min2 = dummy::min2(real, real) returns (real) on clock XXX
+
+		node dummy::max2 = dummy::max2(real, real) returns (real) on clock XXX
+
+		node dummy::min4 = dummy::min4(real, real, real, real) returns (real) on clock XXX
+
+		node dummy::OlympicAverage = dummy::OlympicAverage(real, real, real, real) returns (real) on clock XXX
+
+		node dummy::max4 = dummy::max4(real, real, real, real) returns (real) on clock XXX
+
+		node dummy::InHardoverRange = dummy::InHardoverRange(real) returns (bool) on clock XXX
+
+		node dummy::noneof = dummy::noneof(bool, bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::twooffour = dummy::twooffour(bool, bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::threeoffour = dummy::threeoffour(bool, bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::InNominalRange = dummy::InNominalRange(real) returns (bool) on clock XXX
+
+		node dummy::FailDetect = dummy::FailDetect(bool, real, bool, bool, bool, real, real, real, bool, bool, bool, bool) returns (bool, bool, int, bool) on clock XXX
+
+		node dummy::abs = dummy::abs(real) returns (real) on clock XXX
+
+		node dummy::Average2 = dummy::Average2(real, real) returns (real) on clock XXX
+
+		node dummy::Average = dummy::Average(real, real, real, real, bool, bool, bool, bool) returns (real) on clock XXX
+
+		node dummy::values_nok = dummy::values_nok(bool, bool, bool, real, real, real, real) returns (bool) on clock XXX
+
+		node dummy::maintain = dummy::maintain(int, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node three_outputs
+       export node test
+       export node two_outputs
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		test (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "test::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::three_outputs = dummy::three_outputs(bool, bool, bool) returns (bool, bool, bool) on clock XXX
+
+		node dummy::test = dummy::test(bool, bool) returns (bool, bool, bool, bool) on clock XXX
+
+		node dummy::two_outputs = dummy::two_outputs(bool, bool) returns (bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node titi
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		titi (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "titi::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::titi = dummy::titi(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type tab1
+       export type tab2
+       export type tab3
+       export type bool4
+       export type really
+       export const ze_const_int
+       export node edge_detect
+       export node implies
+       export node after
+       export node bidon
+       export node once_from_to
+       export node once_since
+       export node toolate
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		toolate (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "toolate::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::tab1 = int^2
+		type dummy::tab2 = int^3^4
+		type dummy::tab3 = int^5^6^7
+		type dummy::bool4 = bool^5
+		type dummy::really = real
+	Exported constants:
+		const dummy::ze_const_int = 5
+	Exported nodes:
+		node dummy::edge_detect = dummy::edge_detect(bool) returns (bool) on clock XXX
+
+		node dummy::implies = dummy::implies(bool, bool) returns (bool) on clock XXX
+
+		node dummy::after = dummy::after(bool) returns (bool) on clock XXX
+
+		node dummy::bidon = dummy::bidon(bool) returns (bool, bool) on clock XXX
+
+		node dummy::once_from_to = dummy::once_from_to(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::once_since = dummy::once_since(bool, bool) returns (bool) on clock XXX
+
+		node dummy::toolate = dummy::toolate(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node toto
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		toto (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "toto::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::toto = dummy::toto(bool, bool) returns (bool) on clock XXX
+
+*** Error in file "should_work/fab_test/morel4.lus", line 23, col 9 to 10, token '.2': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type toto
+       export type arrayb
+       export type tube
+       export type arrayi
+       export node morel5
+       export node tab
+       export node mcmorel
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		morel5 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "morel5::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::toto =  {titi :  {in : int; out : int}; tutu : bool}
+		type dummy::arrayb = bool^3
+		type dummy::arrayi = int^2^3
+		type dummy::tube =  {in : int; out : int}
+	Exported constants:
+	Exported nodes:
+		node dummy::morel5 = dummy::morel5( {titi :  {in : int; out : int}; tutu : bool}, bool^3, int^2^3) returns (bool, bool, bool, int, int, int) on clock XXX
+
+		node dummy::tab = dummy::tab( {titi :  {in : int; out : int}; tutu : bool}, bool^3, int^2^3) returns (bool, bool, bool, int, int, int) on clock XXX
+
+		node dummy::mcmorel = dummy::mcmorel(int) returns (int^2, int^2^2) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const i
+       export const j
+       export const k
+       export node cst
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		cst (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "cst::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+		const dummy::i = dummy::i
+		const dummy::j = dummy::j
+		const dummy::k = dummy::k
+	Exported nodes:
+		node dummy::cst = dummy::cst(int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node CURRENT
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		CURRENT (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "CURRENT::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::CURRENT = dummy::CURRENT(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type t1
+       export type t2
+       export type s
+       export type t
+       export type s1
+       export node ex
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		ex (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "ex::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::t1 = int^1^2^3^4^4
+		type dummy::t2 =  {a : int; b : bool^11^22}
+		type dummy::s =  {x : int^1^2^3^4; y :  {x : int; y : int^1^2^3^4}}
+		type dummy::t = int^1^2^3^4
+		type dummy::s1 =  {x : int; y : int^1^2^3^4}
+	Exported constants:
+	Exported nodes:
+		node dummy::ex = dummy::ex( {x : int^1^2^3^4; y :  {x : int; y : int^1^2^3^4}}) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node exclusion
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		exclusion (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "exclusion::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::exclusion = dummy::exclusion(bool, bool, bool, bool) returns (bool, bool, bool, bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node PCOND
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		PCOND (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "PCOND::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::PCOND = dummy::PCOND(bool, bool, bool, bool, int, int, bool, bool, bool) returns (bool, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node followed_by
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		fby (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "fby::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::followed_by = dummy::followed_by(bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node PCOND1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		PCOND1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "PCOND1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::PCOND1 = dummy::PCOND1(bool, bool, bool, bool, int, int, bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node SWITCH
+       export node flo
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		flo (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "flo::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::SWITCH = dummy::SWITCH(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::flo = dummy::flo(bool, bool, bool, bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node SOURIS
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		SOURIS (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "SOURIS::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::SOURIS = dummy::SOURIS(bool, bool, bool, bool) returns (bool, bool, bool, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type structT
+       export type t1
+       export type t2
+       export type t3
+       export type tabStruct
+       export type string2d
+       export type string
+       export const a
+       export const b
+       export const c
+       export node hanane
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		hanane (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "hanane::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::t1 = dummy::t1
+		type dummy::structT =  {x : int; y : real; z : int^4^4^4}
+		type dummy::t2 = dummy::t2
+		type dummy::t3 = dummy::t3
+		type dummy::tabStruct =  {x : int; y : real; z : int^4^4^4}^2
+		type dummy::string2d = int^4^4
+		type dummy::string = int^4
+	Exported constants:
+		const dummy::a = 4
+		const dummy::b = true
+		const dummy::c = 3.140000
+	Exported nodes:
+		node dummy::hanane = dummy::hanane(bool, int^4^4,  {x : int; y : real; z : int^4^4^4}^2) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type STATUS_TYPE
+       export type ALARM_TIME_TYPE
+       export type ALARM_TIME_POSITION
+       export type WATCH_TIME_POSITION
+       export type DISPLAY_TYPE
+       export type WATCH_TIME_TYPE
+       export type STOPWATCH_TIME_TYPE
+       export type MAIN_DISPLAY_TYPE
+       export type LABELS_TYPE
+       export type DISPLAY_POSITION
+       export type MINI_DISPLAY_TYPE
+       export type string
+       export const INITIAL_WATCH_POSITION
+       export const INITIAL_WATCH_TIME
+       export const ALARM_DURATION
+       export const stringAL
+       export const stringST
+       export const INITIAL_ALARM_POSITION
+       export const INITIAL_ALARM_TIME
+       export const NULL_POSITION
+       export const INITIAL_STOPWATCH_TIME
+       export node ALARM_TO_DISPLAY_POS
+       export node DIVIDE
+       export node TWO_STATES
+       export node INCREMENT_STOPWATCH_TIME
+       export node Watch
+       export node WATCH_TIME_TO_MAIN_DISPLAY
+       export node IS_ZERO_MOD_10_MN
+       export node MAKE_DISPLAY
+       export node TOGGLE_24H_IN_ALARM_MODE
+       export node SET_WATCH_TIME
+       export node STOPWATCH
+       export node TIME_SCALE
+       export node SET_ALARM_TIME
+       export node LABELS
+       export node WATCH_DATE_TO_MINI_DISPLAY
+       export node IS_O_CLOCK
+       export node STOPWATCH_TIME_TO_MAIN_DISPLAY
+       export node INCREMENT_WATCH_TIME_IN_SET_MODE
+       export node ALARM_TIME_TO_MAIN_DISPLAY
+       export node MORE_RECENT
+       export node WATCH
+       export node NEXT_ALARM_TIME_POSITION
+       export node NEXT_WATCH_TIME_POSITION
+       export node WATCH_TO_DISPLAY_POS
+       export node TOGGLE_24H_IN_WATCH_MODE
+       export node SOMME
+       export node DISPLAY
+       export node EDGE
+       export node COMPARE_WATCH_ALARM_TIME
+       export node STATUS
+       export node WATCH_TIME_TO_MINI_DISPLAY
+       export node CONFIRM_TIME
+       export node INCREMENT_WATCH_TIME
+       export node BUTTONS
+       export node WATCH_DAY_TO_ALPHA_DISPLAY
+       export node ALARM
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		Watch (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "Watch::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::STATUS_TYPE = dummy::STATUS_TYPE
+		type dummy::ALARM_TIME_TYPE = dummy::ALARM_TIME_TYPE
+		type dummy::WATCH_TIME_POSITION = dummy::WATCH_TIME_POSITION
+		type dummy::ALARM_TIME_POSITION = dummy::ALARM_TIME_POSITION
+		type dummy::DISPLAY_TYPE = dummy::DISPLAY_TYPE
+		type dummy::WATCH_TIME_TYPE = dummy::WATCH_TIME_TYPE
+		type dummy::STOPWATCH_TIME_TYPE = dummy::STOPWATCH_TIME_TYPE
+		type dummy::MAIN_DISPLAY_TYPE = dummy::MAIN_DISPLAY_TYPE
+		type dummy::LABELS_TYPE = dummy::LABELS_TYPE
+		type dummy::DISPLAY_POSITION = dummy::DISPLAY_POSITION
+		type dummy::MINI_DISPLAY_TYPE = dummy::MINI_DISPLAY_TYPE
+		type dummy::string = dummy::string
+	Exported constants:
+		const dummy::INITIAL_WATCH_POSITION = dummy::INITIAL_WATCH_POSITION
+		const dummy::INITIAL_WATCH_TIME = dummy::INITIAL_WATCH_TIME
+		const dummy::ALARM_DURATION = dummy::ALARM_DURATION
+		const dummy::stringST = dummy::stringST
+		const dummy::stringAL = dummy::stringAL
+		const dummy::INITIAL_ALARM_TIME = dummy::INITIAL_ALARM_TIME
+		const dummy::INITIAL_ALARM_POSITION = dummy::INITIAL_ALARM_POSITION
+		const dummy::NULL_POSITION = dummy::NULL_POSITION
+		const dummy::INITIAL_STOPWATCH_TIME = dummy::INITIAL_STOPWATCH_TIME
+	Exported nodes:
+		node dummy::ALARM_TO_DISPLAY_POS = extern ALARM_TO_DISPLAY_POS(dummy::ALARM_TIME_POSITION) returns (dummy::DISPLAY_POSITION)
+
+		node dummy::INCREMENT_STOPWATCH_TIME = extern INCREMENT_STOPWATCH_TIME(dummy::STOPWATCH_TIME_TYPE) returns (dummy::STOPWATCH_TIME_TYPE)
+
+		node dummy::TWO_STATES = dummy::TWO_STATES(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::DIVIDE = dummy::DIVIDE(int) returns (bool) on clock XXX
+
+		node dummy::Watch = dummy::Watch(bool, bool, bool, bool, bool) returns (dummy::DISPLAY_TYPE, int) on clock XXX
+
+		node dummy::IS_ZERO_MOD_10_MN = extern IS_ZERO_MOD_10_MN(dummy::STOPWATCH_TIME_TYPE) returns (bool)
+
+		node dummy::WATCH_TIME_TO_MAIN_DISPLAY = extern WATCH_TIME_TO_MAIN_DISPLAY(dummy::WATCH_TIME_TYPE) returns (dummy::MAIN_DISPLAY_TYPE)
+
+		node dummy::TOGGLE_24H_IN_ALARM_MODE = extern TOGGLE_24H_IN_ALARM_MODE(dummy::ALARM_TIME_TYPE) returns (dummy::ALARM_TIME_TYPE)
+
+		node dummy::MAKE_DISPLAY = extern MAKE_DISPLAY(dummy::MAIN_DISPLAY_TYPE, dummy::MINI_DISPLAY_TYPE, dummy::string, dummy::STATUS_TYPE, dummy::DISPLAY_POSITION, dummy::LABELS_TYPE) returns (dummy::DISPLAY_TYPE)
+
+		node dummy::SET_WATCH_TIME = extern SET_WATCH_TIME(dummy::WATCH_TIME_TYPE, dummy::WATCH_TIME_POSITION) returns (dummy::WATCH_TIME_TYPE)
+
+		node dummy::STOPWATCH = dummy::STOPWATCH(bool, bool, bool) returns (dummy::STOPWATCH_TIME_TYPE, bool, bool, int) on clock XXX
+
+		node dummy::TIME_SCALE = extern TIME_SCALE(int) returns (int)
+
+		node dummy::SET_ALARM_TIME = extern SET_ALARM_TIME(dummy::ALARM_TIME_TYPE, dummy::ALARM_TIME_POSITION) returns (dummy::ALARM_TIME_TYPE)
+
+		node dummy::LABELS = extern LABELS(bool, bool, bool, bool, bool) returns (dummy::LABELS_TYPE)
+
+		node dummy::IS_O_CLOCK = extern IS_O_CLOCK(dummy::WATCH_TIME_TYPE) returns (bool)
+
+		node dummy::WATCH_DATE_TO_MINI_DISPLAY = extern WATCH_DATE_TO_MINI_DISPLAY(dummy::WATCH_TIME_TYPE) returns (dummy::MINI_DISPLAY_TYPE)
+
+		node dummy::STOPWATCH_TIME_TO_MAIN_DISPLAY = extern STOPWATCH_TIME_TO_MAIN_DISPLAY(dummy::STOPWATCH_TIME_TYPE) returns (dummy::MAIN_DISPLAY_TYPE)
+
+		node dummy::INCREMENT_WATCH_TIME_IN_SET_MODE = extern INCREMENT_WATCH_TIME_IN_SET_MODE(dummy::WATCH_TIME_TYPE, dummy::WATCH_TIME_POSITION) returns (dummy::WATCH_TIME_TYPE)
+
+		node dummy::ALARM_TIME_TO_MAIN_DISPLAY = extern ALARM_TIME_TO_MAIN_DISPLAY(dummy::ALARM_TIME_TYPE) returns (dummy::MAIN_DISPLAY_TYPE)
+
+		node dummy::NEXT_WATCH_TIME_POSITION = extern NEXT_WATCH_TIME_POSITION(dummy::WATCH_TIME_POSITION) returns (dummy::WATCH_TIME_POSITION)
+
+		node dummy::NEXT_ALARM_TIME_POSITION = extern NEXT_ALARM_TIME_POSITION(dummy::ALARM_TIME_POSITION) returns (dummy::ALARM_TIME_POSITION)
+
+		node dummy::WATCH = dummy::WATCH(bool, bool, bool, bool, bool, bool) returns (dummy::WATCH_TIME_TYPE, dummy::WATCH_TIME_POSITION, bool, int) on clock XXX
+
+		node dummy::MORE_RECENT = dummy::MORE_RECENT(bool, int) returns (bool) on clock XXX
+
+		node dummy::SOMME = extern SOMME(int, int, int) returns (int)
+
+		node dummy::TOGGLE_24H_IN_WATCH_MODE = extern TOGGLE_24H_IN_WATCH_MODE(dummy::WATCH_TIME_TYPE) returns (dummy::WATCH_TIME_TYPE)
+
+		node dummy::WATCH_TO_DISPLAY_POS = extern WATCH_TO_DISPLAY_POS(dummy::WATCH_TIME_POSITION) returns (dummy::DISPLAY_POSITION)
+
+		node dummy::DISPLAY = dummy::DISPLAY(bool, bool, bool, dummy::WATCH_TIME_TYPE, dummy::STOPWATCH_TIME_TYPE, dummy::ALARM_TIME_TYPE, dummy::DISPLAY_POSITION, dummy::STATUS_TYPE, dummy::LABELS_TYPE) returns (dummy::DISPLAY_TYPE) on clock XXX
+
+		node dummy::COMPARE_WATCH_ALARM_TIME = extern COMPARE_WATCH_ALARM_TIME(dummy::WATCH_TIME_TYPE, dummy::ALARM_TIME_TYPE) returns (bool)
+
+		node dummy::EDGE = dummy::EDGE(bool) returns (bool) on clock XXX
+
+		node dummy::WATCH_TIME_TO_MINI_DISPLAY = extern WATCH_TIME_TO_MINI_DISPLAY(dummy::WATCH_TIME_TYPE) returns (dummy::MINI_DISPLAY_TYPE)
+
+		node dummy::STATUS = extern STATUS(bool, bool, bool, bool) returns (dummy::STATUS_TYPE)
+
+		node dummy::CONFIRM_TIME = extern CONFIRM_TIME(dummy::WATCH_TIME_TYPE) returns (dummy::WATCH_TIME_TYPE)
+
+		node dummy::INCREMENT_WATCH_TIME = extern INCREMENT_WATCH_TIME(dummy::WATCH_TIME_TYPE) returns (dummy::WATCH_TIME_TYPE)
+
+		node dummy::BUTTONS = dummy::BUTTONS(bool, bool, bool, bool) returns (bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool) on clock XXX
+
+		node dummy::WATCH_DAY_TO_ALPHA_DISPLAY = extern WATCH_DAY_TO_ALPHA_DISPLAY(dummy::WATCH_TIME_TYPE) returns (dummy::string)
+
+		node dummy::ALARM = dummy::ALARM(bool, bool, bool, bool, bool, bool, bool, dummy::WATCH_TIME_TYPE) returns (dummy::ALARM_TIME_TYPE, bool, dummy::ALARM_TIME_POSITION, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node X
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		X (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "X::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::X = dummy::X(bool, int) returns (bool, int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node n2
+       export node n3
+       export node n4
+       export node nc7
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc7 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc7::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(int) returns (int) on clock XXX
+
+		node dummy::n2 = dummy::n2(int) returns (int) on clock XXX
+
+		node dummy::n3 = dummy::n3(int) returns (int) on clock XXX
+
+		node dummy::n4 = dummy::n4(int, int, int, int, int) returns (int) on clock XXX
+
+		node dummy::nc7 = dummy::nc7(int) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node import1
+       export node imp
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		import1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "import1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::import1 = dummy::import1(int, int) returns (int) on clock XXX
+
+		node dummy::imp = extern imp(int) returns (int)
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node X1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		X1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "X1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::X1 = dummy::X1(bool, int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node initial
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		initial (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "initial::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::initial = dummy::initial(bool) returns (bool, int, real) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node X2
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		X2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "X2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::X2 = dummy::X2(bool, int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node X3
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		X3 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "X3::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::X3 = dummy::X3(int, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node minmax1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		minmax1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "minmax1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::minmax1 = dummy::minmax1(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node minmax2
+       export node minmax
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		minmax2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "minmax2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::minmax2 = dummy::minmax2(int, int) returns (int, int) on clock XXX
+
+		node dummy::minmax = dummy::minmax(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node X6
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		X6 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "X6::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::X6 = dummy::X6(int, bool) returns (int, bool, bool, int, int, int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node minmax3
+       export node minmax
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		minmax3 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "minmax3::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::minmax3 = dummy::minmax3(int, int, int) returns (int, int, int) on clock XXX
+
+		node dummy::minmax = dummy::minmax(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node _N_uu
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		_N_uu (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "_N_uu::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::_N_uu = dummy::_N_uu(bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node cpt
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		cpt (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "cpt::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::cpt = dummy::cpt(bool, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node s
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		s (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "s::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::s = dummy::s(int, int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node activation_ec
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		activation_ec (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "activation_ec::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::activation_ec = dummy::activation_ec(bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node drapfab
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		drapfab (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "drapfab::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::drapfab = dummy::drapfab(bool, bool, bool) returns (bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node minmax4
+       export node minmax
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		minmax4 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "minmax4::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::minmax4 = dummy::minmax4(int, int, int, int) returns (int, int, int, int) on clock XXX
+
+		node dummy::minmax = dummy::minmax(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node after
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		after (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "after::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::after = dummy::after(bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const delai_reprise
+       export const delai_vigilence
+       export const delai_alarme
+       export node edge
+       export node alarme
+       export node bascule
+       export node decompte
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		alarme (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "alarme::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+		const dummy::delai_reprise = 4
+		const dummy::delai_vigilence = 3
+		const dummy::delai_alarme = 6
+	Exported nodes:
+		node dummy::edge = dummy::edge(bool) returns (bool) on clock XXX
+
+		node dummy::alarme = dummy::alarme(bool, bool, bool, bool) returns (bool, bool) on clock XXX
+
+		node dummy::bascule = dummy::bascule(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::decompte = dummy::decompte(bool, int, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node minmax4_bis
+       export node minmax
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		minmax4_bis (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "minmax4_bis::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::minmax4_bis = dummy::minmax4_bis(int, int, int, int) returns (int, int, int, int) on clock XXX
+
+		node dummy::minmax = dummy::minmax(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node mutex
+       export node process
+       export node my_switch
+       export node xedge
+       export node arbitre
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		arbitre (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "arbitre::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::mutex = dummy::mutex(bool, bool, bool, bool) returns (bool, bool, bool, bool) on clock XXX
+
+		node dummy::process = dummy::process(bool, bool) returns (bool, bool) on clock XXX
+
+		node dummy::my_switch = dummy::my_switch(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::xedge = extern xedge(bool) returns (bool)
+
+		node dummy::arbitre = dummy::arbitre(bool, bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node minmax5
+       export node minmax
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		minmax5 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "minmax5::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::minmax5 = dummy::minmax5(int, int, int, int) returns (int, int, int, int) on clock XXX
+
+		node dummy::minmax = extern minmax(int, int) returns (int, int)
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node argos
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		argos (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "argos::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::argos = dummy::argos(bool, bool) returns (bool, bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node minmax5_random
+       export node minmax
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		minmax5_random (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "minmax5_random::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::minmax5_random = dummy::minmax5_random(int, int, int, int) returns (int, int, int, int) on clock XXX
+
+		node dummy::minmax = extern minmax(int, int) returns (int, int)
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node assertion
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		assertion (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "assertion::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::assertion = dummy::assertion(bool, bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node minmax6
+       export node minmax
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		minmax6 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "minmax6::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::minmax6 = dummy::minmax6(int, int, int, int, int, int) returns (int, int, int, int, int, int) on clock XXX
+
+		node dummy::minmax = dummy::minmax(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type pairpair
+       export type pair
+       export node mm
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mm (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mm::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}}
+		type dummy::pair =  {a : int; b : int}
+	Exported constants:
+	Exported nodes:
+		node dummy::mm = dummy::mm(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node aux
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		aux (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "aux::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::aux = dummy::aux(bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type pairpair
+       export type pair
+       export node mm1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mm1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mm1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}}
+		type dummy::pair =  {a : int; b : int}
+	Exported constants:
+	Exported nodes:
+		node dummy::mm1 = dummy::mm1(int, int) returns ( {a : int; b : int}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node aux1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		aux1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "aux1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::aux1 = dummy::aux1(int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type pairpair
+       export type pair
+       export node mm22
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mm22 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mm22::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}}
+		type dummy::pair =  {a : int; b : int}
+	Exported constants:
+	Exported nodes:
+		node dummy::mm22 = dummy::mm22(int, int) returns ( {a : int; b : int}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node bascule
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		bascule (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "bascule::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::bascule = dummy::bascule(bool, bool) returns (bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type pairpair
+       export type pair
+       export node mm3
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mm3 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mm3::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}}
+		type dummy::pair =  {a : int; b : int}
+	Exported constants:
+	Exported nodes:
+		node dummy::mm3 = dummy::mm3( {a : int; b : int}) returns ( {a : int; b : int}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node f
+       export node n
+       export node p
+       export node call
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		call (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "call::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::f = extern f(int) returns (int)
+
+		node dummy::n = dummy::n(int, bool) returns (int, int) on clock XXX
+
+		node dummy::p = extern p(int) returns (int, int)
+
+		node dummy::call = dummy::call(int, bool) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node mouse
+       export node edge
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mouse (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mouse::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::mouse = dummy::mouse(bool, bool, int) returns (bool, bool) on clock XXX
+
+		node dummy::edge = dummy::edge(bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node ck2
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		ck2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "ck2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::ck2 = dummy::ck2(bool, bool, int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node mouse1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mouse1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mouse1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::mouse1 = dummy::mouse1(bool, bool, int) returns (bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node ck3
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		ck3 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "ck3::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::ck3 = dummy::ck3(bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node mouse2
+       export node edge
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mouse2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mouse2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::mouse2 = dummy::mouse2(bool, bool, int) returns (bool, bool) on clock XXX
+
+		node dummy::edge = dummy::edge(bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node ck4
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		ck4 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "ck4::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::ck4 = dummy::ck4(int, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node mouse3
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mouse3 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mouse3::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::mouse3 = dummy::mouse3(bool, bool, int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node edge
+       export node ck5
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		ck5 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "ck5::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::edge = dummy::edge(bool) returns (bool) on clock XXX
+
+		node dummy::ck5 = dummy::ck5(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node p
+       export node ck6
+       export node N
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		ck6 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "ck6::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::p = extern p(int) returns (int, int)
+
+		node dummy::ck6 = dummy::ck6(bool, bool, int, int) returns (int, int) on clock XXX
+
+		node dummy::N = dummy::N(bool, int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node moyenne
+       export node multiclock
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		multiclock (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "multiclock::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::multiclock = dummy::multiclock(int, int, bool, int) returns (int) on clock XXX
+
+		node dummy::moyenne = dummy::moyenne(int, int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node ck7
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		ck7 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "ck7::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::ck7 = dummy::ck7(bool, int, int) returns (int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node nc1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(bool, bool) returns (bool) on clock XXX
+
+		node dummy::nc1 = dummy::nc1(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node nc10
+       export node n1
+       export node n2
+       export node n3
+       export node n4
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc10 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc10::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::nc10 = dummy::nc10(int) returns (bool) on clock XXX
+
+		node dummy::n1 = dummy::n1(int) returns (int) on clock XXX
+
+		node dummy::n2 = dummy::n2(int, int) returns (int) on clock XXX
+
+		node dummy::n3 = dummy::n3(int, int) returns (int) on clock XXX
+
+		node dummy::n4 = dummy::n4(int, int, int, int) returns (int, int) on clock XXX
+
+*** Error in file "should_work/NONREG/clock.lus", line 20, col 40 to 43, token 'when': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node nc2
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(bool, bool) returns (bool) on clock XXX
+
+		node dummy::nc2 = dummy::nc2(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node TWO_STATES
+       export node TWO_BUTTONS
+       export node cminus
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		cminus (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "cminus::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::TWO_STATES = dummy::TWO_STATES(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::TWO_BUTTONS = dummy::TWO_BUTTONS(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::cminus = dummy::cminus(bool, bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node nc3
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc3 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc3::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(bool, bool) returns (bool) on clock XXX
+
+		node dummy::nc3 = dummy::nc3(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node compteur
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		compteur (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "compteur::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::compteur = dummy::compteur(bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node n2
+       export node nc4
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc4 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc4::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(bool, bool) returns (bool) on clock XXX
+
+		node dummy::n2 = dummy::n2(bool, bool) returns (bool) on clock XXX
+
+		node dummy::nc4 = dummy::nc4(bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type pendule
+       export const G
+       export const L
+       export const T
+       export node make_pend
+       export node cos
+       export node sin
+       export node deconne
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		deconne (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "deconne::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::pendule = dummy::pendule
+	Exported constants:
+		const dummy::G = 10.000000
+		const dummy::L = 2.000000
+		const dummy::T = 0.100000
+	Exported nodes:
+		node dummy::make_pend = extern make_pend(real, real, real, real) returns (dummy::pendule)
+
+		node dummy::cos = extern cos(real) returns (real)
+
+		node dummy::sin = extern sin(real) returns (real)
+
+		node dummy::deconne = dummy::deconne(real) returns (dummy::pendule) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node n2
+       export node n3
+       export node n4
+       export node nc5
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc5 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc5::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(int) returns (int) on clock XXX
+
+		node dummy::n2 = dummy::n2(int) returns (int) on clock XXX
+
+		node dummy::n3 = dummy::n3(int) returns (int) on clock XXX
+
+		node dummy::n4 = dummy::n4(int) returns (int) on clock XXX
+
+		node dummy::nc5 = dummy::nc5(int) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node dep
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		dep (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "dep::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::dep = dummy::dep(int) returns (int, int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node n2
+       export node n3
+       export node n4
+       export node nc6
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc6 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc6::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(int) returns (int) on clock XXX
+
+		node dummy::n2 = dummy::n2(int) returns (int) on clock XXX
+
+		node dummy::n3 = dummy::n3(int) returns (int) on clock XXX
+
+		node dummy::n4 = dummy::n4(int) returns (int) on clock XXX
+
+		node dummy::nc6 = dummy::nc6(int) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node dependeur
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		dependeur (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "dependeur::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::dependeur = dummy::dependeur(int) returns (int, int, int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node node_caller1
+       export node ex1
+       export node ex2
+       export node ex3
+       export node ex4
+       export node ex5
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		node_caller1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "node_caller1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::node_caller1 = dummy::node_caller1(int) returns (int) on clock XXX
+
+		node dummy::ex1 = dummy::ex1(int) returns (int) on clock XXX
+
+		node dummy::ex2 = dummy::ex2(int) returns (int) on clock XXX
+
+		node dummy::ex3 = dummy::ex3(int) returns (int) on clock XXX
+
+		node dummy::ex4 = dummy::ex4(int) returns (int) on clock XXX
+
+		node dummy::ex5 = dummy::ex5(int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type time
+       export node dependeur_struct
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		dependeur_struct (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "dependeur_struct::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::time =  {h : int; m : int; s : int; ms : int}
+	Exported constants:
+	Exported nodes:
+		node dummy::dependeur_struct = dummy::dependeur_struct(int) returns ( {h : int; m : int; s : int; ms : int}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node eq1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		eq1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "eq1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::eq1 = dummy::eq1(bool, bool, bool, bool, bool) returns (bool, bool, bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node long_et_stupide_nom_de_noeud
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		long_et_stupide_nom_de_noeud (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "long_et_stupide_nom_de_noeud::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::long_et_stupide_nom_de_noeud = dummy::long_et_stupide_nom_de_noeud(int) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node n2
+       export node n3
+       export node n4
+       export node nc8
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc8 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc8::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(int) returns (int) on clock XXX
+
+		node dummy::n2 = dummy::n2(int, int) returns (int) on clock XXX
+
+		node dummy::n3 = dummy::n3(int, int) returns (int) on clock XXX
+
+		node dummy::n4 = dummy::n4(int, int, int, int) returns (int) on clock XXX
+
+		node dummy::nc8 = dummy::nc8(int) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node n1
+       export node n2
+       export node n3
+       export node n4
+       export node nc9
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		nc9 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "nc9::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::n1 = dummy::n1(int) returns (int) on clock XXX
+
+		node dummy::n2 = dummy::n2(int, int) returns (int) on clock XXX
+
+		node dummy::n3 = dummy::n3(int, int) returns (int) on clock XXX
+
+		node dummy::n4 = dummy::n4(int, int, int, int) returns (int, int) on clock XXX
+
+		node dummy::nc9 = dummy::nc9(int) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node o2l_feux_compl
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		o2l_feux_compl (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "o2l_feux_compl::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::o2l_feux_compl = dummy::o2l_feux_compl(bool, bool, bool, bool, bool) returns (bool, bool, bool, bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node patrick
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		patrick (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "patrick::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::patrick = dummy::patrick(int, int, bool, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node TWO_STATES
+       export node ONE_BUTTON
+       export node poussoir
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		poussoir (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "poussoir::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::TWO_STATES = dummy::TWO_STATES(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::ONE_BUTTON = dummy::ONE_BUTTON(bool, bool) returns (bool) on clock XXX
+
+		node dummy::poussoir = dummy::poussoir(bool, bool) returns (bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node rs
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		rs (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "rs::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::rs = dummy::rs(bool, bool) returns (bool) on clock XXX
+
+*** Error in file "should_work/NONREG/simple.lus", line 2, col 20 to 20, token '{': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node simple_stopwatch
+       export node stopwatch
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		stopwatch (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "stopwatch::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::simple_stopwatch = dummy::simple_stopwatch(bool, bool, bool) returns (int, bool) on clock XXX
+
+		node dummy::stopwatch = dummy::stopwatch(bool, bool, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node testCA
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		testCA (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "testCA::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::testCA = dummy::testCA(int) returns (int, int, int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node edge
+       export node trivial
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		trivial (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "trivial::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::edge = dummy::edge(bool) returns (bool) on clock XXX
+
+		node dummy::trivial = dummy::trivial(bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node edge
+       export node trivial2
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		trivial2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "trivial2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::edge = dummy::edge(bool) returns (bool) on clock XXX
+
+		node dummy::trivial2 = dummy::trivial2(bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node uu
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		uu (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "uu::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::uu = dummy::uu(bool, bool, bool) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node v1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		v1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "v1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::v1 = dummy::v1(int, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export enum const blue
+       export enum const white
+       export enum const redd
+       export type color
+       export enum const bleu
+       export enum const blanc
+       export enum const rouge
+       export type couleur
+       export node boo
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		enum (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "enum::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::couleur = enum {dummy::bleu, dummy::blanc, dummy::rouge}
+		type dummy::color = enum {dummy::blue, dummy::white, dummy::redd}
+	Exported constants:
+		const dummy::bleu = dummy::bleu
+		const dummy::blanc = dummy::blanc
+		const dummy::redd = dummy::redd
+		const dummy::rouge = dummy::rouge
+		const dummy::blue = dummy::blue
+		const dummy::white = dummy::white
+	Exported nodes:
+		node dummy::boo = dummy::boo(int) returns (enum {dummy::bleu, dummy::blanc, dummy::rouge}, enum {dummy::blue, dummy::white, dummy::redd}) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack mainPack
+       export node Nat
+    init pack Int8
+       export type Int
+       export const zero
+       export node incr
+       export node add
+       export const n
+*** SyntaxTab.create pass 3
+   init symbol tables for pack mainPack
+   init symbol tables for pack Int8
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		Int (model) 
+		Int8 (pack) 
+		mainPack (pack) 
+		
+	 - Raw model table: Int 
+	 - Raw Package table: mainPack Int8 
+	 - Package manager table: mainPack Int8 
+End of Syntax table dump. »
+-- MAIN NODE: "Int8::main"
+*** Dump the exported items of the packages.
+ * package Int8
+	Exported types:
+		type Int8::Int = Int8::Int
+	Exported constants:
+Int8::n = 8 can be provided.
+*** oops: an internal error occurred in file lazyCompiler.ml, line 318, column 5
+*** when compiling lustre program should_work/NONREG/Int.lus
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const SIZE
+       export node aliasGivenNode
+       export node aliasPredefNot
+       export node unNoeud
+       export node aliasIterOp
+       export node alias
+       export node aliasBoolRed
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		alias (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "alias::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+		const dummy::SIZE = 3
+*** Error in file "should_work/demo/alias.lus", line 39, col 23 to 33, token 'Lustre::not': unknown node
+
+	Exported nodes:
+		node dummy::aliasGivenNode = dummy::unNoeud(int, int^3) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node bred
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		bred (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "bred::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::bred = dummy::bred(bool^2) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node Clock1ms_node
+       export node Clock2ms_node
+       export node clock1_2ms
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		clock1_2ms (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "clock1_2ms::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::Clock1ms_node = dummy::Clock1ms_node(bool) returns (bool) on clock XXX
+
+		node dummy::Clock2ms_node = dummy::Clock2ms_node(bool) returns (bool) on clock XXX
+
+		node dummy::clock1_2ms = dummy::clock1_2ms(bool) returns (bool, bool) on clock XXX
+
+*** Error in file "should_work/demo/decl.lus", line 19, col 19 to 19, token ',': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node rising
+       export node lustre_test1_ok
+       export node subsys1
+       export node TransFnc_1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		lustre_test1_ok (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "lustre_test1_ok::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::rising = dummy::rising(bool) returns (bool) on clock XXX
+
+		node dummy::lustre_test1_ok = dummy::lustre_test1_ok(real, bool, bool, real, bool, bool) returns (real, real, real) on clock XXX
+
+		node dummy::subsys1 = dummy::subsys1(real) returns (real) on clock XXX
+
+		node dummy::TransFnc_1 = dummy::TransFnc_1(real) returns (real) on clock XXX
+
+*** Error in file "should_work/demo/mapdeRed.lus", line 12, col 17 to 17, token '+': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node incr_tab
+       export node mapiter
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mapiter (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mapiter::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::incr_tab = dummy::incr_tab(int) returns (int) on clock XXX
+
+		node dummy::mapiter = dummy::mapiter(int^7^3) returns (int^7^3) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node plus
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		plus (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "plus::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::plus = dummy::plus(int, int) returns (int, int, int, int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node pre_x
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		pre_x (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "pre_x::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::pre_x = dummy::pre_x(int, int) returns (bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node max
+       export node rediter
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		rediter (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "rediter::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::max = dummy::max(int, int) returns (int) on clock XXX
+
+		node dummy::rediter = dummy::rediter(int^5^3) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node make_cl1_4_2
+       export node MainNode
+       export node make_cl1_12_3
+       export node sample_time_change
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		sample_time_change (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "sample_time_change::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::MainNode = dummy::MainNode(real) returns (real) on clock XXX
+
+		node dummy::make_cl1_4_2 = dummy::make_cl1_4_2(bool) returns (bool) on clock XXX
+
+		node dummy::make_cl1_12_3 = dummy::make_cl1_12_3(bool) returns (bool) on clock XXX
+
+		node dummy::sample_time_change = dummy::sample_time_change(bool, bool, real) returns (real) on clock XXX
+
+*** Error in file "should_work/demo/tranche.lus", line 21, col 7 to 8, token '.2': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type T1_ARRAY
+       export type T2_ARRAY
+       export node mapiter
+       export node m_m_incr_tab_7_3
+       export node m_incr_tab_7
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		mapiter_lv4 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "mapiter_lv4::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::T1_ARRAY = int^7
+		type dummy::T2_ARRAY = int^7^3
+	Exported constants:
+	Exported nodes:
+		node dummy::mapiter = dummy::mapiter(int^7^3) returns (int^7^3) on clock XXX
+
+		node dummy::m_m_incr_tab_7_3 = dummy::m_m_incr_tab_7_3(int^7^3) returns (int^7^3) on clock XXX
+
+		node dummy::m_incr_tab_7 = dummy::m_incr_tab_7(int^7) returns (int^7) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type T1_ARRAY
+       export node bred
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		bred_lv4 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "bred_lv4::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::T1_ARRAY = bool^2
+	Exported constants:
+	Exported nodes:
+		node dummy::bred = dummy::bred(bool^2) returns (bool) on clock XXX
+
+*** Error in file "should_work/demo/Gyroscope2.lus", line 106, col 1 to 1, token '%': syntax error
+
+*** Error in file "should_work/demo/clock.lus", line 4, col 37 to 40, token 'when': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type t1
+       export type t2
+       export type t3
+       export type t4
+       export type t5
+       export type coord
+       export type coord_tab
+       export enum const bleu
+       export enum const blanc
+       export enum const rouge
+       export type couleur
+       export const d
+       export const e
+       export const f
+       export const g
+       export const h
+       export const a
+       export const b
+       export const c
+       export node declaration
+       export node f1
+       export node n1
+       export node n2
+       export node n4
+       export node n5
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		declaration (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "declaration::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::t1 = dummy::t1
+		type dummy::t2 = dummy::t2
+		type dummy::t3 = dummy::t3
+		type dummy::t4 = dummy::t1^8
+		type dummy::t5 = dummy::t1^8^5
+		type dummy::coord =  {x : real; y : real}
+		type dummy::coord_tab =  {x : real; y : real}^1
+		type dummy::couleur = enum {dummy::bleu, dummy::blanc, dummy::rouge}
+	Exported constants:
+		const dummy::d = true
+		const dummy::e = 8.500000
+		const dummy::f = dummy::blanc
+		const dummy::g = 4
+		const dummy::h = 2
+		const dummy::bleu = dummy::bleu
+		const dummy::blanc = dummy::blanc
+		const dummy::rouge = dummy::rouge
+		const dummy::a = dummy::a
+		const dummy::b = dummy::b
+		const dummy::c = dummy::c
+	Exported nodes:
+		node dummy::declaration = dummy::declaration(int) returns (int) on clock XXX
+
+		node dummy::f1 = extern f1(enum {dummy::bleu, dummy::blanc, dummy::rouge}, enum {dummy::bleu, dummy::blanc, dummy::rouge}, enum {dummy::bleu, dummy::blanc, dummy::rouge}) returns (bool^2)
+
+		node dummy::n1 = extern n1(dummy::t1, dummy::t1, dummy::t1) returns (bool)
+
+		node dummy::n2 = extern n2(dummy::t1^8, dummy::t1^8, dummy::t1^8, bool) returns (dummy::t1^8^5)
+
+		node dummy::n4 = dummy::n4(bool) returns (bool) on clock XXX
+
+		node dummy::n5 = dummy::n5(real) returns (real) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type structT
+       export type t1
+       export type t2
+       export type t3
+       export type tabStruct
+       export type string2d
+       export type string
+       export const id_int
+       export const a
+       export const b
+       export const c
+       export node def
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		def (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "def::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::t1 = dummy::t1
+		type dummy::structT =  {x : int; y : real; z : int^4^4^4}
+		type dummy::t2 = dummy::t2
+		type dummy::t3 = dummy::t3
+		type dummy::tabStruct =  {x : int; y : real; z : int^4^4^4}^2
+		type dummy::string2d = int^4^4
+		type dummy::string = int^4
+	Exported constants:
+		const dummy::id_int = 5
+		const dummy::a = 4
+		const dummy::b = true
+		const dummy::c = 3.140000
+	Exported nodes:
+		node dummy::def = dummy::def(bool, int^4^4,  {x : int; y : real; z : int^4^4^4}^2, int^23) returns (bool) on clock XXX
 
-		node dummy::abs = dummy::abs(real) returns (real) on clock XXX
+*** Error in file "should_work/demo/filliter.lus", line 25, col 12 to 13, token '.2': syntax error
 
-		node dummy::noneoftree = dummy::noneoftree(bool, bool, bool) returns (bool) on clock XXX
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type complexe
+       export type cdouble
+       export node filter
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		filter (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "filter::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::complexe =  {x : real; y : real}
+		type dummy::cdouble =  {x :  {x : real; y : real}; y :  {x : real; y : real}}
+	Exported constants:
+	Exported nodes:
+		node dummy::filter = dummy::filter(real, real) returns (bool) on clock XXX
 
-		node dummy::Average = dummy::Average(real, real) returns (real) on clock XXX
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type INTNBC
+       export type T_EntreeGlob
+       export type INTNBG
+       export type T_ComChg
+       export type T_InfoGenIndiv
+       export type T_EtatCharge
+       export type T_InfoChgGlob
+       export type T_InfoChgIndiv
+       export type T_InfoGenGlob
+       export const NBC
+       export const NBG
+       export node traite_genCore_itere
+       export node map_red_iter
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		map_red_iter (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "map_red_iter::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::INTNBC = int^20
+		type dummy::T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4}
+		type dummy::INTNBG = int^4
+		type dummy::T_ComChg = int
+		type dummy::T_InfoGenIndiv =  {mesure_gen : int}
+		type dummy::T_EtatCharge = int
+		type dummy::T_InfoChgGlob =  {chg2gen : int^20}
+		type dummy::T_InfoChgIndiv =  {mesure_chg : int}
+		type dummy::T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20}
+	Exported constants:
+		const dummy::NBC = 20
+		const dummy::NBG = 4
+	Exported nodes:
+		node dummy::traite_genCore_itere = dummy::traite_genCore_itere(int, bool, int) returns (int, int) on clock XXX
 
-		node dummy::oneoftree = dummy::oneoftree(bool, bool, bool) returns (bool) on clock XXX
+		node dummy::map_red_iter = dummy::map_red_iter(int,  {mesure_gen : int},  {elt_bidon : int; chg2gen : int^20}, int^20, bool^20) returns (int^20) on clock XXX
+
+*** Error in file "should_work/demo/mappredef.lus", line 10, col 14 to 14, token ',': syntax error
+
+*** Error in file "should_work/demo/redoptest.lus", line 8, col 17 to 17, token '+': syntax error
+
+*** Error in file "should_work/to_sort_out/record.lus", line 2, col 2 to 7, token 'struct': syntax error
+
+*** Error in file "should_work/to_sort_out/asservi.lus", line 7, col 1 to 8, token 'function': syntax error
+
+*** Error in file "should_work/to_sort_out/const2.lus", line 10, col 11 to 11, token 'M': unknown constant
 
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  func_with_body.lus
 *** SyntaxTab.create pass 1
 *** SyntaxTab.create pass 2
     init pack dummy
-       export node ext
-       export node trivial
+       export type t1
+       export type t2
+       export type t3
+       export type t4
+       export type t5
+       export type t6
+       export type t7
+       export type t8
+       export const e3
 *** SyntaxTab.create pass 3
    init symbol tables for pack dummy
 *** SyntaxTab.create done
 *** « Syntax table dump:
  	 - Package or model list:
-		func_with_body (pack) 
+		const2 (pack) 
 		
 	 - Raw model table: 
 	 - Raw Package table: dummy 
 	 - Package manager table: dummy 
 End of Syntax table dump. »
--- MAIN NODE: "func_with_body::main"
+-- MAIN NODE: "const2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::t1 = int
+Those tests are supposed to generate errors
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export const m
+       export const n
+       export const t
+       export const x
+       export const y
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		x (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "x::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+*** Error in file "should_fail/semantics/x.lus", line 4, col 7 to 7, token 'm': recursion loop detected:
+   > const ref in file "should_fail/semantics/x.lus", line 4, col 11 to 11, token 'x'
+   > const ref in file "should_fail/semantics/x.lus", line 6, col 11 to 11, token 't'
+   > const ref in file "should_fail/semantics/x.lus", line 8, col 11 to 11, token 'n'
+   > const ref in file "should_fail/semantics/x.lus", line 2, col 11 to 11, token 'm'
+
+	Exported constants:
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type st
+       export type int4
+       export node def
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		def (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "def::main"
 *** Dump the exported items of the packages.
  * package dummy
 	Exported types:
+		type dummy::st =  {x : int^4}
+		type dummy::int4 = int^4
 	Exported constants:
 	Exported nodes:
-		node dummy::ext = extern ext(int) returns (int)
+		node dummy::def = dummy::def(bool) returns ( {x : int^4}) on clock XXX
 
-		node dummy::trivial = dummy::trivial(int) returns (int) on clock XXX
+*** Error in file "should_fail/semantics/not_a_constant.lus", line 10, col 23 to 24, token '--': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node up
+       export node down
+       export node activation2
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		activation2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "activation2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::up = dummy::up(int) returns (int) on clock XXX
+
+		node dummy::down = dummy::down(int) returns (int) on clock XXX
+
+		node dummy::activation2 = dummy::activation2(bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node up
+       export node down
+       export node activation1
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		activation1 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "activation1::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::up = dummy::up(int) returns (int) on clock XXX
+
+		node dummy::down = dummy::down(int) returns (int) on clock XXX
+
+		node dummy::activation1 = dummy::activation1(bool, bool) returns (int) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type tab1
+       export type tab2
+       export type tab3
+       export type bool4
+       export type really
+       export const ze_const_int
+       export node bug
+       export node edge_detect
+       export node implies
+       export node after
+       export node bidon
+       export node once_from_to
+       export node once_since
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		bug (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "bug::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::tab1 = int^2
+		type dummy::tab2 = int^3^4
+		type dummy::tab3 = int^5^6^7
+		type dummy::bool4 = bool^5
+		type dummy::really = real
+	Exported constants:
+		const dummy::ze_const_int = 5
+	Exported nodes:
+		node dummy::bug = dummy::bug(bool, bool, int, real) returns (bool, int, real) on clock XXX
+
+		node dummy::edge_detect = dummy::edge_detect(bool) returns (bool) on clock XXX
+
+		node dummy::implies = dummy::implies(bool, bool) returns (bool) on clock XXX
+
+		node dummy::after = dummy::after(bool) returns (bool) on clock XXX
+
+		node dummy::bidon = dummy::bidon(bool) returns (bool, bool) on clock XXX
+
+		node dummy::once_from_to = dummy::once_from_to(bool, bool, bool) returns (bool) on clock XXX
+
+		node dummy::once_since = dummy::once_since(bool, bool) returns (bool) on clock XXX
+
+*** Error in file "should_fail/semantics/const.lus", line 18, col 17 to 17, token ',': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node cpt_dc
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		cpt_dc (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "cpt_dc::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::cpt_dc = dummy::cpt_dc(bool, bool) returns (int) on clock XXX
 
- 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3  pfs.lus
-*** Error in file "pfs.lus", line 43, col 22 to 22, token '[': syntax error
+*** Error in file "should_fail/semantics/import2.lus", line 2, col 1 to 4, token 'node': syntax error
 
+*** Error in file "should_fail/semantics/m.lus", line 3, col 23 to 23, token ',': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node piege
+       export node aux1
+       export node aux2
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		piege (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "piege::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+	Exported nodes:
+		node dummy::piege = dummy::piege(bool) returns (bool) on clock XXX
+
+		node dummy::aux1 = dummy::aux1(bool, bool) returns (bool) on clock XXX
+
+		node dummy::aux2 = dummy::aux2(bool, bool) returns (bool, bool) on clock XXX
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export node titi
+       export node bad_call01
+       export node toto
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		bad_call01 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "bad_call01::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+	Exported constants:
+*** Error in file "dummy", line 0, col 0 to 0, token 'dummy': recursion loop detected:
+   > node ref in file "should_fail/semantics/bad_call01.lus", line 2, col 13 to 16, token 'titi'
+
+	Exported nodes:
+*** Error in file "should_fail/semantics/bad_call03.lus", line 2, col 18 to 18, token '+': syntax error
+
+*** Error in file "should_fail/clock/clock.lus", line 6, col 1 to 4, token 'node': syntax error
+
+*** Error in file "should_fail/type/Gyro.lus", line 11, col 42 to 42, token ',': syntax error
+
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack dummy
+       export type t1
+       export type t2
+       export type t3
+       export type t4
+       export type t5
+       export type t6
+       export type t7
+       export type t8
+       export const e1
+       export const c10
+       export const e2
+       export const M
+       export const N
+       export const O
+       export const c1
+       export const P
+       export const c2
+       export const c3
+       export const c4
+       export const c5
+       export const c6
+       export const c7
+       export const c8
+       export const c9
+*** SyntaxTab.create pass 3
+   init symbol tables for pack dummy
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		const2 (pack) 
+		
+	 - Raw model table: 
+	 - Raw Package table: dummy 
+	 - Package manager table: dummy 
+End of Syntax table dump. »
+-- MAIN NODE: "const2::main"
+*** Dump the exported items of the packages.
+ * package dummy
+	Exported types:
+		type dummy::t1 = int
+		type dummy::t2 = int^3
+		type dummy::t3 = int^3^7
+		type dummy::t4 = int^3^7^8
+		type dummy::t5 = int^3^7^8^9
+		type dummy::t6 = int^3^7^8^9^3
+		type dummy::t7 = int^3^7^8^9^3^8
+		type dummy::t8 = int^3^7^8^9^3^8^8
+*** Error in file "should_fail/type/const2.lus", line 16, col 12 to 13, token '<>': can't eval constant: type combination error, t*t for some type t expected
+
+	Exported constants:
+		const dummy::c10 = 3
-- 
GitLab