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