LISTE DES BOGUES CORRIGEES DANS l'OUTIL FNC2

                Mihaela Sighireanu
                Xavier Bouchoux
                Claude Chaudet
                Christophe Discours
                Mark Jorgensen
                Bruno Vivien
        
                INRIA Rhone-Alpes / VASY
                655, avenue de l'Europe
                38330 MONTBONNOT SAINT MARTIN
                FRANCE

Version 1.7 - Date 99/02/11 17:21:23
Number:         [VASY-FNC2-1]
Report:         Mark Jorgensen
Tool:           fnc2 (v1.16)
Status:         Documentation modified (v1.18)

Je n'ai pas reussi a utiliser les fonctions de la string-module decrit a la page 103 du manuel.
fonctions :

        substr
        omit
        insert
        index
        search
        verify

Apparemment, elles sont inexistentes.
Donc pour manipuler les strings, je vais devoir passer par des fonctions C externes.

Ces fonctions n'ont pas ete implementees, elles ne seront plus documentees a l'avenir.


Number:         [VASY-FNC2-2]
Report:         Mark Jorgensen
Tool:           fnc2 (v.16)
Status:         Documentation modified (v1.18)

Le code de member qui se trouve a la page 122 du manuel, ne marche pas. Apparemment, il est impossible d'utiliser les types META @T.

Cette fonctionnalite ne sera pas implementee.


Number:         [VASY-FNC2-3]
Report:         Mark Jorgensen
Tool:           ppat
Status:         FIXED in v1.16

Je veux utiliser plusieurs fois PPAT. (J'ai besoin d'imprimer l'arbre de deux manieres differentes). Le seul probleme, est que le fichier SVL.c (SVL est le nom de mon langage) est mauvais, car il contient deux fois les definitions de Largeur, Filename, et les include sont aussi fait deux fois, ce qui cause probleme.
Du coup, je dois patcher le fichier SVL.c a la main, et m'arranger pour que FNC2 ne le regenere pas.


Number:         [VASY-FNC2-4]
Report:         Mark Jorgensen
Tool:           fnc2 (v1.16)
Status:         FIXED (v.17)

Probleme dans le code engendre par FNC2 : En gros, j'ai des problemes lorsque j'utilise des fonctions "look-ahead" dans ma grammaire attribue. Cette fonction (case B1 is beh_src(SOURCE) ci-dessous) fait que le code produit pour le fichier SVL__check_regles.c va chercher dans la table de symboles : SVL__base_asx_table qui n'existe pas. Seuls SVL__in_asx_table et SVL__out_asx_table sont definis.

-o-o-o-o-o-

<ag_SVL-check.olga>

        attribute grammar SVL-check (SVL-in, SVL-out) is
        ...
                where beh_rv_parallel -> B1 B2 ID_L use
                ...
                $network_filename(B1) := case B1 is
                        beh_src(SOURCE) :
                                $network_filename;
                        other :
                                new_exp_file();
                end case ;
        ...
        end where ;
        ...

-o-o-o-o-o-

<SVL-in.asx>

        grammar SVL-in is
        import grammar SVL-base ;
        ...

-o-o-o-o-o-

<SVL-out.asx>

        grammar SVL-out is
        import grammar SVL-base ;
        ...

Number:         [VASY-FNC2-5]
Report:         Mark Jorgensen
Tool:           ppat (v1.16)
Status:         FIXED in v1.18

Lorsque j'imprime un token (ici, le token text) avec ppat, celui-ci ne contient pas la bonne donnee.

J'inclus un fichier tar dans celui-ci se trouve un repertoire LVS dans lequel se trouve tous les sources.

dans le repertoire LVS/TESTS
LVS test01.lvs
>>>>> Program toto.aut definition fichier au lieu de
>>>>> Program file.aut definition fichier

Je contourne le probleme en attachant aux noeuds ou il y a un token text, un attribut contenant le string de text, et j'imprime ce string avec ppat.

Reponse Didier Parigot : c'est un probleme connu, d'ordre de declaration d'attributs dans l'arbre d'entree du ppat. (voir 5.8. dans FAQ)


Number:         [VASY-FNC2-6]
Report:         Mark Jorgensen
Tool:           ppat
Status:         FIXED in v1.16

Je transforme l'arbre SVL-out en SVL-shell. Jusque la, pas de problemes. J'imprime sans aucun probleme SVL-shell avec ppat, et l'arbre produit est correct.

Ensuite je veux parcourir l'arbre SVL-shell, pour le decorer. Et la, ca pose probleme. FNC2 compile tous mes fichiers, et ne me signale aucune erreur, ni aucun warning, ou quoi que ce soit.

Mais lors de l'execution :
- certains fichiers me font des "core dump" (s'est le cas de TESTS/gen10.svl) - d'autres me sortent un programme errone (c'est le cas de TESTS/gen1.svl).


Number:         [VASY-FNC2-7]
Report:         Mark Jorgensen
Tool:           fnc2 (v.16)
Status:         FIXED (v1.18 20/01/99)

La surcharge des noms des fonctions ne marche pas. J'ai defini une fonction member pour les listes de token et pour les listes de strings. Et bien, ca ne marchait pas pour les listes de strings. J'ai renomme member pour les strings en str_member et ca a marche. cf SVL2


Number:         [VASY-FNC2-8]
Report:         Mark Jorgensen
Tool:           fnc2
Status:         FIXED in v1.16

Core dump dans le code produit :

            ...
        Segmentation fault (core dumped)
gdb SVL core
        GDB is free software and you are welcome to distribute copies of it
        under certain conditions; type "show copying" to see the conditions.
        There is absolutely no warranty for GDB; type "show warranty" for details.
        GDB 4.15.1 (sparc-sun-sunos4.1.4), 
        Copyright 1995 Free Software Foundation, Inc... &gt;&gt;
        Core was generated by `SVL'.
        Program terminated with signal 11, Segmentation fault.
        Reading symbols from /usr/ucblib/libc.so.1.9.1...done. &gt;&gt;
        Reading symbols from /usr/ucblib/libdl.so.1.0...done. &gt;&gt;
        #0  0x8c20 in F_SVL__exp_STMT_def_1 (arg_1=311905)
        at /home/ubac/users/jorgense/SVL/src_fnc2/SVL__exp_regles.c:147
        147     return str_get_type(string___token(arg_1));
(gdb) quit
        ...

ag_SVL-shell.olga ligne 168 qui provient de la ligne OLGA :

        ...
        $h.format(BEHAV) := str_get_type(string($text(TEXT)))
        ...
        si je le transforme en :

        ...
        $h.format(BEHAV) := str_get_type($strtext(TEXT))

Number:         [VASY-FNC2-9]
Report:         Mark Jorgensen
Tool:           fnc2
Status:         FIXED in v1.16

Core dump (lors de l'execution du code produit):

...
ag_SVL-shell.olga

        where src_file -> TEXT
        declare value
                source_format : string :=
                        {if $type_automate(TEXT) = ".lotos" then --> core dump}
                        if $open_type = "lotos" then
                ...

Le fichier TEXT qui provoque l'erreur en question est un fichier ".bcg".


Number:         [VASY-FNC2-10]
Report:         Mark Jorgensen
Tool:           fnc2 (v.16)
Status:         FIXED (v1.17)

Core dump (lors de l'execution du code produit) :

-o-o-o-o-o-o-o-o-o-o-o-o-
<414> SVL gen20.svl

        version 0.0
        gen20.svl:
        Scanner & Parser
        
                Semantic Pass
        
                Listing Output
        2nd Pass
        Segmentation fault (core dumped)
<415> !g
        gdb SVL core
        GDB is free software and you are welcome to distribute copies of it
        under certain conditions; type "show copying" to see the conditions.
        There is absolutely no warranty for GDB; type "show warranty" for details.
        GDB 4.15.1 (sparc-sun-sunos4.1.4),
        Copyright 1995 Free Software Foundation, Inc...
        Core was generated by `SVL'.
        Program terminated with signal 11, Segmentation fault.
        Reading symbols from /usr/ucblib/libc.so.1.9.1...done.
        Reading symbols from /usr/ucblib/libdl.so.1.0...done.
        #0  0x285f4 in f2___op_merge ()
        (gdb)

-o-o-o-o-o-o-o-o-o-o-o-ole
f2___op_merge correspond a :

        ag_SVL-shell.olga :
        where program -> STMTS  use
                $s_SHELL_PROGRAM := op_shell_program(
                                        op_shell_stmt_list-merge(
                                                $result(STMTS),
                                                $s_SHELL_STMTS(STMTS)
                                        )
                                );
        end where ;

et c'est le $result(STMTS) qui pose probleme (si on le remplace par op_shell_stmt_list(), ca marche ).

Or, $result(STMTS) = $s.generate_list(STMT.last) generate_list est compound. J'utilise les regles automatiques de recopie a maximum pour cela.

Le probleme se pose des que j'ai plus de 2 STMT : des qu'il y en a 3, ca foire. Ce qui me laisse presager qu'il y a un probleme avec les regles de recopie. --> Le synth du frere ne prend pas la bonne valeur (?)


Number:         [VASY-FNC2-11]
Report:         Mark Jorgensen
Tool:           fnc2 (v.16)
Status:         FIXED (v1.18)

Confirmation du fait que les recopies automatiques ne se font pas bien du tout sur les compound :

J'ai un attribut compound :

compound $tool(STMT,BEHAV) : string ;

Je le defini le h.tool dans STMTS :

        where stmt_list -> STMT  + use
                $h.tool(STMT.first) := "aldebaran" ;
        end where ;

et plus loin :

        where set_default_tool -> TOOL   use
                $correct := true ;
                $s.tool := $toolname(TOOL) ;
        end where ;

Je m'attends donc a ce que si j'ai une intstruction

DEFAULT_TOOL = fc2tools
que donc $s.tool := "fc2tools" et donc que le h.tool de son frere gauche vaille alors fc2tools (regles de recopies des attributs compound : "if that son is not the leftmost one, then it will receive the value of the synthesized part of the same attribute of its left brother, if it exists" manuel p 171).

Mais les tests (TESTS/GEN/gen22.svl) me montrent que la recopie se fait etrangement : l'attribut $h.tool vaut "aldebaran" sur tous les STMT.

Par contre, si je remplace la ligne par :

        where stmt_list -> STMT  + use
                $h.tool(STMT) := case position is
                        first : "aldebaran" ;
                        other : $s.tool(STMT.left);
                end case;
        end where ;

Il n'y a plus de problemes, je retrouve ma valeur fc2tools dans tous les freres droits.


Number:         [VASY-FNC2-12]
Report:         Mihaela Sighireanu
Tool:           fnc2 (v.16)
Status:         FIXED (v1.18)

(voir aussi 2.2, 2.3 en FAQ)

The fnc2 use by default the option "-total" while compiling attribute grammars. This option forces the evaluation of all atributes either if they are not used to compute attributs defined for the root node. When you have this "incomplete" grammars, you obtain the errors at Compilation.

o-o-o-o-o-o

While using "-ntotal" option, the evaluation of attributes which are not needed by the computation of the "result" attributes is not forced. The compilation with FNC2 does not signal such cases. However, you may obtain an executable which "core dumps" on function `f2___oper_attr`.


Number:         [VASY-FNC2-13]
Report:         Mihaela Sighireanu
Tool:           fnc2 (v.16)
Status:         FIXED (v1.18)

(voir aussi 5.5 en FAQ)

Le code genere C pour le code Olga suivant

        message "op-top-level-declarations " + string (CORRECT_PH3)
                position value $scx [ph-top-level-declarations]
                severity 2
                value CORRECT_PH3;

est incorrect

        sxput_error( = arg_1;
        , "%s %s.", sxtab_ptr
        ->err_titles[2],plus___string("op-top-level-declarations "
        ,string___bool(CORRECT_PH3)));
        return CORRECT_PH3;

ce qui donne une erreur a la compilation

        "/local_home/users/sighirea/Parallelisme/Traian/Code/src_fnc2/elotos_bind_int_regles.c",
        line 138: syntax error before or at: =
        cc: acomp failed for
        /local_home/users/sighirea/Parallelisme/Traian/Code/src_fnc2/elotos_bind_int_regles.c
        gmake: ***
        [/local_home/users/sighirea/Parallelisme/Traian/Code/lib/sun5/elotos_bind_int_regles.o]
        Error 2

-o-o-o-o-o-o-o-o-

La syntaxe de message n'est plus celle ci : position value n'existe plus, il suffit d'ecrire

        message  "..."
        position <source-index ou phylum>
        severity ...
        value ...;

Dans le cas de position phylum, on considere automatiquement l'attribut $scx du phylum.


Number:         [VASY-FNC2-14]
Report:         Mihaela Sighireanu
Tool:           fnc2 (v1.16)
Status:         FIXED (v1.18)

(voir aussi 12.3 en FAQ)

Dans le listing genere par sxlisting_output, les nombres correspondant aux messages d'erreur et aux warnings sont inverses. Par exemple on signale 14 warning et le message affiche est "14 errors and 0 warnings are reported." !!


Number:         [VASY-FNC2-15]
Report:         Mihaela Sighireanu
Tool:           fnc2 (v1.16)    
Status:         FIXED (v1.17)

(voir aussi 11.1 en FAQ)

The prefnc2 tool creates a `application.recor' file but the construction asks for a `langage.recor' file.

Define a `langage.recor' file by copying the `application.recor' and then modifying it for your application.


Number:         [VASY-FNC2-16]
Date:           Wed, 08 Jul 1998 18:01:03 +0200
Report:         Mihaela Sighireanu
Tool:           fnc2 (v1.16)
Status:         FIXED (v1.18)

(voir aussi 2.4 en FAQ)

La constructions et la compilation des sources avec FNC2 se passe tres bien. Toutefois, l'executable produit un `core dump` sur tous les fichiers de test a l'appel de la deuxieme grammaire attribuee, `ag_lotosnt_bind_mod.olga`.

Plus precisement, l'erreur apparait dans le fichier `lotosnt_bind_mod_auto.c` dans la fonction v_33_27_31_2 qui appelle f2___oper_attr afin de allouer les attributs de la premiere grammaire attribuee `ag_lotosnt_bind_int.olga`.
Il faut remarquer que :

        (1) les attributs externes de ces grammaires sont declares 
            dans le me^me ordre dans les fichiers `lotos_bind_*.asx`.

        (2) la generation des regles par defaut est correcte dans
            `tmp/ag_lotosnt_bind_mod.olga.l`.

De me^eme, l'executable a un comportement bizarre avec le calcul des attributs de la premiere grammaire attribuee : l'attribut `$INTERFACE_ENV` n'est pas calcule (le message de debug "COMPUTE SIGNATURE" n'est pas emis) au fin de l'appel de la grammaire ou il est definit. Est-ce normal et comment forcer sont evaluation avant l'appel de la deuxieme grammaire ?

C'est un probleme de l'option -total et un bug de l'option -ntotal.


Number:         [VASY-FNC2-17]
Date:           Tue Jul 21 19:04:10 MET DST 1998
Report:         Christophe Discours
Tool:           fnc2 (v1.16)
Status:         FIXED in v1.18

fnc2 produces a "core dump" while type checking the grammar generated for the ppat file SVL-ppat.olga.

...
CD@ubac17-)gdb `which fnc2`

        GDB is free software and you are welcome to distribute copies of it
        under certain conditions; type "show copying" to see the conditions.
        There is absolutely no warranty for GDB; type "show warranty" for details.
        GDB 4.16 (sparc-sun-solaris2.5), 
        Copyright 1996 Free Software Foundation, Inc...(no debugging symbols found)...
(gdb) run  -H ../incl_fnc2/ -C ../src_fnc2/ ag_SVL-ppat.olga
        Starting program: /common/Fnc2/bin/sun5/fnc2 -H ../incl_fnc2/ -C ../src_fnc2/ ag_SVL-ppat.olga
        (no debugging symbols found)...(no debugging symbols found)...
        (no debugging symbols found)...Release 1.16 of (98/01/22 14:30:07)
        ag_SVL-ppat.olga:
                Scanner & Parser & Abstract Tree
        and
        ^
        ag_SVL-ppat.olga, line 25: column 2: Warning:   "and" is replaced by "inline".
        : 0.16
                        Olga :
                                Type checking :**
        Program received signal SIGSEGV, Segmentation fault.
        0x2472d4 in recher_module_ste ()
        (gdb) where
        #0  0x2472d4 in recher_module_ste ()
        #1  0x2472fc in creer_name_id ()
        #2  0x247888 in creer_nat_info ()
        #3  0x24a414 in module_read ()
        #4  0x1cf1f0 in F_typage_COMPILATION__UNIT_simple__AG_2 ()
        #5  0x1bc8b0 in v_10_8_6_4_1_12 ()
        #6  0x1cce4c in v_10_8_6_4_1 ()
        #7  0x1cdec8 in typage ()
        #8  0x4f99c in tctypage ()
        #9  0x10f94 in tabfncsmp ()
        #10 0x1182c in olga_smp ()
        #11 0x241dfc in f2atc ()
        #12 0x51398 in olga_run ()
        #13 0x52604 in main ()
        (gdb) quit

Commentaire : Il semble avoir la me^me cause que le [VASY-FNC2-28] point (1)


Number:         [VASY-FNC2-18]
Date:           Fri, 24 Jul 1998 18:39:52
Report:         Xavier Bouchoux
Tool:           fnc2
Status:         FIXED in v1.17

At the execution of fnc2 an error HEAD(NULL) appears for the following pattern matching expression :

            ...
        case A is
        acces (pos (n, p)) : tostringa (acces (p)) + "." + string (n) ;
        acces (pos ()) : "rho" ;
        acces (null) : "acces_vide" ;
        end case

where

        acces = union
                pos ;
                void ;
        end union ;
        pos = list of int;
            ...

        The pattern `acces(pos(n,p))` is not matched if the list built with
        `pos` has one element. The correct result should be p = pos().

Number:         [VASY-FNC2-19]
Date:           Mon Jul 27 20:33:44 MET DST 1998
Report:         Mihaela Sighireanu
Tool:           fnc2 (v1.16)    
Status:         FIXED (v1.18)

(voir aussi 2.5 et 2.6 dans FAQ)

There is a problem with the computation of attributes for simple assignements.

Remark: all the grammars are compiled with the total option and no errors are signaled at compilation, so the grammar seems to be complete.

For example, in the file ag_lotosnt_bind_mod.olga, we have :

...

        where op-interface-declaration -> 
                        ph-identifier 
                        ph-interface-expression-list 
                        ph-interface-body
        use
                { **** Pour forcer Fnc2 a generer une fonction pour ce phylum **** }
                $CORRECT_PH1 := true;
                $CORRECT_PH2 := let t1 : bool :=
                                        (!empty ($M1_Mn_PH1 [ph-compilation-unit])) &
                                        (!empty ($INTERFACE_ENV_G [ph-compilation-unit]))
                                in true;
                ...

The normal result should be "true" in all cases for this attribute. However, at the top level the result obtained is "false". The run of the executable with the dbx shows that attribute is computed correctly in the stack
(function F_lotosnt_bind_mod_ph__top__level__declaration_op__interface__declaration_2 and its use in file *_bin_mod_auto.c) but the computations following this call change this stack (P_3) at the ph-top-level-declaration level because the following error message appears:

        ...
        interface I1 
        ^
        LotosNT/module:006.lotnt, line 3: column 1: Warning:    
        ph-top-level-declaration PH2 : false

...

for the file test module:006.lotnt.
The strange thing is that for the interface declaration I2 the attribute is correctly computed. The cause may the the presence of a "ph-interface-expression-list" not null.

A similar error appears also for the computation of `CORRECT_PH2` in the
grammar `ag_lotosnt_bind_int.olga` for the `ph-module-expression-list` used in `op-specification-declaration` (see test file lecl_005) when the specification have a empty `ph-module-expression-list`. The strange thing is that for the tests file lecl_001 (which declare also an interface with an empty `ph-module-expression-list`), the computation of CORRECT_PH2 is correct.


Number:         [VASY-FNC2-20]
Date:           Tue, 11 Aug 1998 22:09:45 +0200
Report:         Mihaela Sighireanu
Tool:           fnc2
Status:         FIXED v1.17

(voir aussi 2.9 dans FAQ)

Dans la grammaire attribue qui effectue la transformation d'arbres, j'utilise des fonctions OLGA locales qui travaillent sur les noeuds de l'arbre. La phase de construction de se passe tres bien, mais a la compilation de la source C generee j'obtiens une erreur de compilation cause par une traduction incorrecte.

Exemple :
La fonction OLGA suivante

        ...
        function CREATE_SEQUENCE_B (B1, B2 : ph-flat-behaviour)
                        : ph-flat-behaviour
        is
                case B1 is
                op-flat-null-behaviour () : B2;
                other :
                        case B2 is
                        op-flat-null-behaviour () : B1;
                        other : op-flat-sequential-behaviour (B1, B2);
                        end case;
                end case
        end function;
        ...

est traduite en C comme suit :

        ...
        static struct f2___struct_node *CREATE_SEQUENCE_E(E1,E2)
        struct f2___struct_node *E1;
        struct f2___struct_node *E2;
        {
        {
        if (f2___name(E1) == lotosnt_flat_op__flat__null__expression_n )
        {
        return E2;
        }
        {
        if (f2___name(E2) == lotosnt_flat_op__flat__null__expression_n )
        {
        return E1;
        }
        {
        struct f2___struct_node *vl_154;
        vl_154 =
        f2___op_fixed_2(lotosnt_flat_asx_table,lotosnt_flat_op__flat__sequentia
        l__expression_n ,E1,E2);
        f2___add_attr (vl_154,return f2___impor (E2,1);
        ,1);
        return vl_154;
        }
        }
        }
        }
        ...

Ce code produit normalement l'erreur de compilation suivant :

o-o-o-o-o-o

        "/local_home/users/sighirea/Parallelisme/Traian/Code/src_fnc2/lotosnt_flat_regles.c",
        line 1143: syntax error before or at: return

o-o-o-o-o-o

Cette erreur de generation de code apparait dans tous les entroits dans le code C ou la fonction f2___impor est utilisee.


Number:         [VASY-FNC2-21]
Date:           Wed, 12 Aug 1998
Report:         Mihaela Sighireanu
Tool:           mkfnc2 (v.16)           
Status:         FIXED (v1.17)

The mkfnc2 does not generate a correct XXXX.MKFNC2 file for the compilation of a tree generated by a AG doing a tree transformation which is not used afterthat in a ".ppat" file. Example: Let be AG a such a grammar:

                ...
        attribute grammar AG1 (ASX1 in ph-axiom1)
                : ($ASX2_AXIOM : ph-axiom2; $CORRECT_FLAT : bool) is
                ...

with ASX1 the input tree and ASX2 the output tree, and suppose that ASX2 is used as input in another grammar AG2 (and not in a ppat file).
The XXXX.MKFNC2 generated contains only "ASX ASX2 ?" clauses and no "ASX_FUNC ASX2 ?" clause.
Then, at the COMPILATION, the ild signals that 'ASX2_asx_table' is not visible in 'AG2_regles.c' and 'AG2_auto.c' files.

Solution: modify your XXXX.MKFNC2 at the entry "AG AG2" the compilation "ASX ASX2 ?" to "ASX_FUNC ASX2 ?".


Number:         [VASY-FNC2-23]
Report:         Xavier Bouchoux et Mihaela Sighireanu
Tool:           fnc2
Status:         FIXED in v1.17

Le source-index de l'arbre construis n'existe pas !!! Il faut utiliser begin-texte ou end-texte, les variable predefinis Non, je ne sais pas faire le calcul des sources-index sur un arbre construis !! et je ne sais pas si je peut prevoir un message dans l'OLGA pour eviter ce probleme !

o-o-o-o-o

Bon je veins de modifier fnc2 pour qu'il accepte que l'on puisse modifier le source-index d'un
arbre

op () with $scx := end with
Donc plus la peine de declarer $scx_flat, on utilise directement le $scx de l'arbre construis !


Number:         [VASY-FNC2-24]
Date:           Wed, 09 Sep 1998 12:42:16 +0200
Report:         Christophe Discours
Tool:           ppat (v1.17)
Status:         FIXED in v1.17 29/09/98

Il semblerait que la syntaxe "if ... elsif ... else ... end if" ne fonctionne pas correctement en ppat. Je joins en attachement de mon mail un tar gzipe d'une version de SVL qui montre ce probleme. Dans le repertoire tests se trouve un exemple qui fait apparaitre le bug (test.svl, qui est un "extrait" de demo_20.svl). Dans le repertoire spec, j'ai 2 versions du fichier SVL-shell.ppat (SVL-shell.ppat.with_elsif et SVL-shell.ppat.without_elsif, par defaut SVL-shell.ppat est une copie de SVL-shell.ppat.with_elsif).

Pour utiliser SVL voici comment il faut faire (apres avoir produit un executable avec FNC2) :
il faut declarer une variable d'environnement SVLDIR qui est le repertoire SVL (par exemple : setenv SVLDIR ~/SVL) puis ensuite appeler le script "d'enrobage" :

$SVLDIR/com/svl test.svl

par exemple.

Le fichier test.svl va produire en sortie (en gros) un arbre abstrait qui est compose principalement d'un noeud 'des' au dessus d'un noeud 'reduction', un noeud 'source' et un noeud 'operateur'. Le probleme se situe dans l'interaction entre le noeud 'des' et le noeud 'recursion'. Le noeud 'recursion' a son attribut $shell_open_type qui vaux "bcg" (on peut le verifier en regardant SVL_debug2) et pour savoir comment, dans la regle ppat du noeud 'des', sa regle ppat va etre appelee, la regle du noeud 'des' teste son attribut (le code commence de la facon suivante :

        if $shell_open_type(B1) = "lotos" |
        $shell_open_type(B1) = "exp" then
        if $shell_on_the_fly(B1) then
                [h1 B1]
        else

etc.

). On remarque que le cas "bcg" est dans un 'elsif' :

        elsif $shell_open_type(B1) = "bcg" | 
        $shell_open_type(B1) = "des" then 
        [v0 
        [h1 B1]
        [h0 "SVL_EXEC \"bcg_open " $shell_out_filename(B1) ".bcg "]
        ]
        elsif $shell_open_type(B1) = "fc2" then

etc.

Or tout se passe comme si les elsif etaient carrement 'sautes' et qu'on passait directement au else. Lorsqu'on compile test.svl avec la commande :

$SVLDIR/com/svl -debug -verbose -script test.svl

ce qui genere un repertoire Script dans lequel se trouve le shell (test) plus des fichiers de debug, on peut voir dans le shell les lignes suivantes :

        ...
        SVL_EXEC "bcg_io rel_rel_Receiver0003_bmin.bcg
        rel_rel_Receiver0003_bmin.bcg" "Conversion of
        rel_rel_Receiver0003_bmin.bcg to .bcg format" #7
        /bin/rm -rf rel_rel_Receiver0003_bmin.bcg
        ...

Qui proviennent bien du code du 'else'.

Maintenant si on produit SVL avec le fichier SVL-shell.ppat.without_elsif (cp SVL-shell.ppat.without_elsif SVL-shell.ppat), dans lequel j'ai reecrit cette sequence 'if then elsif else end if' en 'if then else if then else end if end if', le shell genere pour test.svl est maintenant correct.


Number:         [VASY-FNC2-25]
Date:           Wed, 09 Sep 1998 14:35:40 +0200
Report:         Mihaela Sighireanu
Tool:           fnc2 (v1.17)
Status:         FIXED in v1.18

Le probleme apparait a la construction d'un nouveau arbre (grammaire ag_lotosnt_flat.olga) et concerne le calcul de l'attribut $NUMBER pour le phylum de l'arbre de sortie ph-flat-identifier.

Cet attribut est affecte dans la majorite de cas a la valeur de l'attribut $NUMBER du phylum de l'arbre d'entree ph-identifier. Les informations de debug indiquent que cet attribut est calcule correctement dans les phases anterieures.

Toutefois, un pprint rapide de l'arbre obtenu (lotosnt_flat_passe1.ppat) montre que l'attribut $NUMBER est toujours affecte a la valeur 9 !! (voir le fichier resultat1.h genere par l'execution de traian sur l'exemple syntax_xb:002.lotnt)

Bien sur que la compilation se passe sans problemes. De plus, j'ai remarque pendant l'ecriture de la grammaire calculant cet attribut, que s'il y avait des endroits ou je n'avais pas specifie le calcul de $NUMBER, fnc2 ne me les signale pas.

Reponse Didier Parigot :
C'est un probleme de declaration d'attributs dans le fichier d'entree du ppat : NUMBER n'y est pas declare, et comme il n'y a pas de typage entre les appels de grammaires en XXXX_smp, fnc2 ne le signale pas.


Number:         [VASY-FNC2-26]
Date:           Wed, 09 Sep 1998 14:55:06 +0200
Report:         Mihaela Sighireanu
Tool:           fnc2 (v1.17)

Ce bogue se resemble a celui qui a genere le BUG 19 (points 2.5 et 2.6 dans FAQ), mais je n'ai pas reussi a le contourner en utilisant les methodes deja proposees.

Ainsi, dans la grammaire ag_lotosnt_bind_int.olga, l'attribut $CORRECT_PH4 est affecte a faux pour ph-module-expression-list quand la liste est vide, bien qu'il est defini comme suit:

        $CORRECT_PH4 :=
                map left &
                value true
                other (if MODE_DEBUG_I then
                        let t4 : bool :=
                        (PrintMessage ("ph-module-expression PH4 : " + string ($CORRECT_PH4 (ph-module-expression)) + "\n") = 0)
                                in true
                        else true
                        end if) &
                $CORRECT_PH4 (ph-module-expression)
        end map;

Pour tester, l'exemple (correct) suivant :

...

module de_test is

        type T1 is
                val1, val2, val3
        end type

        type T2 is
                a,b
        end type

        type C1 is
                const1(x : T1),
                const2(x : T1, y : T1)
        end type
        function F( t: C1) : T2 is
                case t is
                        any -> return a
                end case
        end function

        end module

...

a comme resultat

        ...
        traian syntax_xb:001.lotnt
        -- traian 0.2 -- M. Sighireanu & B. Vivien --

        traian:  syntax analysis of ``syntax_xb:001.lotnt''
        traian:  semantic analysis of ``syntax_xb:001.lotnt''
        traian:          - interfaces binding and signature of ``syntax_xb:001.lotnt''
        debug:   ph-top-level-declaration PH2 : true
        debug:   ph-interface-expression PH4 : true
        debug:   ph-module-expression-list PH4 : false
        debug:   ph-module-body PH4 : true
        debug:   ph-top-level-declaration PH4 : false
        debug:   ph-compilation-unit PH1 : true
        debug:   ph-compilation-unit PH2 : true
        debug:   ph-compilation-unit PH3 : true
        debug:   ph-compilation-unit PH4 : false
        Error: interfaces binding and signature 

        Listing Output
        Segmentation Fault (core dumped)

...

Bien qu'il ne pas blocant, ce bogue me semble bien bizare car je croyais savoir resoudre de tels problemes. De plus, avec la version 1.16 ne produisait pas de tels erreurs.

Le comportement est d'autant plus bizare qu'il apparait d'une facon aleatoire : dans les autres exemples ayant la me^me structure au niveau des modules que syntax_xb:001.lotnt, le calcul est correct.


Number:         [VASY-FNC2-28]
Date:           Wed, 29 Jul 1998 12:38:20 +0200
Report:         Christophe Discours
Tool:           fnc2, ppat (v1.16)
Status:         FIXED in v1.17

(voir 10.3)

(1) : SVL.ppat (donc version .notok) fait un segmentation fault lorsque fnc2 essaye de compiler le fichier .olga genere correspondant. Ce probleme disparait (cp spec/SVL.ppat.ok spec/SVL.ppat) en modifiant une <box> en la mettant de type compound au lieu de string (a noter que cette <box> n'est pas tres importante et ne me sert qu'a des fins de debug. Dans la version finale elle sera remplacee par une string vide : "", qui, elle, ne fait pas planter).

(2) : Maintenant que j'arrive a compiler mon compilateur, je veux debugger l'arbre abstrait et afficher les attributs. Si l'on prend l'exemple que je fourni dans le repertoire test et que l'on veut le compiler avec la commande : "../bin/sun5/SVL test01.svl > test01" on obtient un segmentation fault au moment ou il veut imprimer le fichier de debug (SVL_debug1). Il semblerait que cela provient du fait que je veux imprimer les attributs $compute_inherit_hide sur les noeuds operateurs. En effet si j'enleve cette impression (cp spec/SVL-debug1.ok spec/SVL-debug1) SVL fonctionne (et me cree bien mon fichier SVL_debug1, mais sans l'affichage des attributs $compute_inherit_hide...).

Reponse Didier Parigot :
L'attribut $compute_inherit_hide est calcule ds ag-check mais pas importer Il est importer que dans out3.
Je sais que comme les appels aux grammaires attribuees et aux ppat sont ecrit directement ds xxx_smp, il n'y a pas de type-check !!!


Number:         [VASY-FNC2-29]
Date:           Mon, 7 Sep 1998 18:00:29 +0200 (MET DST)
Report:         Christophe Discours
Tool:           ppat (v1.17)

Dans un fichier ppat, lorsqu'on veut imprimer une regle qui a un nombre quelconque de fils, on utilise 'pplist' comme par exemple :

        where id-list -> ID  + pprint
                pplist left
                        global h1
                        insert ","
                        subbox ID
                end pplist
        end where ;

Dans cet exemple, si on a un arbre de la forme :

id-list(id($id := "ID1"), id($id := "ID2"))

Cela affichera : "ID1, ID2" (et c'est bien ce que je veux...).

(remarque : les attributs $id sont de type token)

Maintenant si j'ai des attributs de type "list of token", pour pouvoir les imprimer avec mon ppat je dois declarer comment imprimer ce type avec un "wheretype". J'ai donc la definition suivante :

        wheretype TOKEN_LIST pprint
                pplist a_token left
                        global h1
                        insert ","
                        subbox a_token
                end pplist
        end where;

(cette definition qui genere justement un 'and' dans le .olga correspondant) Le probleme c'est que si j'ai une liste de token avec dedans, par exemple :

("ID1", "ID2")

Ce que je vais voir affiche c'est : "ID1, ID2," ! Ce qui n'est pas du tout ce que je veux.


Number:         [VASY-FNC2-30]
Date:           Tue, 08 Sep 1998 13:49:43 +0200
Report:         Xavier Bouchoux 
Tool:           fnc2 (v1.17)
Status:         FIXED (v1.18)

(voir aussi 2.11 en FAQ)

Si dans la grammaire qui calcule un arbre en sortie, l'attribut $scx n'est pas affecte pour un noeud, fnc2 ne dit rien (il donne une valeur par defaut 0,0,0). Toutefois, si $scx est utilise ensuite par une autre grammaire, le binaire engendre fait des core dump systematiquement a l'utilisation de $scx.

o-o-o-o-o-o-o

Les lignes suivantes :

        $s_FLAT_expression_match_list := 
                map left  op-flat-expression-match-list-merge 
                        value op-flat-expression-match-list () with $scx := $scx end with 
                        other $s_FLAT_expression_match_list (ph-expression-match) 
                end map; 

produissent un core dump a l'execution car fnc2 ne sais pas definir le source-index de la liste retourne par op-merge(l1,l2). Donc actuellement la liste retourner ne contient pas de source-index.


Number:         [VASY-FNC2-31]
Date:           Fri, 21 Aug 1998 16:43:50 +0200
Report:         Xavier Bouchoux et Christophe Discours
Tool:           fnc2 (v1.17)
Status:         FIXED v1.17

La grammaire attribue generee par le ppat est fausse, car le module de declaration assoice (genere automatiquement) n'est pas correct.

Ce module est genere ds le tmp comme la grammaire attribue assoicie au ppat. Il faut le modifier, mais ATTENTION, a chaque appel de ppat il sera ecrase.


Number:         [VASY-FNC2-32]
Date:           Wed, 19 Aug 1998 10:34:10 +0200 
Report:         Xavier Bouchoux
Tool:           fnc2 (v1.16)
Status:         FIXED v1.17

Dans cette version, l'utilisation de l'attribut $scx comme un attribut global n'est pas signale comme etant une erreur.

(L'acces correct a un attribut "global" demande que cet attribut soit declaré en global et de travail).


Number:         [VASY-FNC2-33]
Date:           Wed, 19 Aug 1998 10:34:10 +0200 
Report:         Xavier Bouchoux
Tool:           fnc2 (v1.17)
Status:         FIXED (v1.18)

Je ne comprends pas ce message d'erreur dans ag_lotosnt-flat.olga :

        Error:   The Asx Module import a declaration Module must be explicited 
        imported Olga specification 

Reponse Didier Parigot :
Les importations de module de declarations effectuees dans un module asx ne sont pas transitives.
Ainsi dans un module de declaration de grammaire attribuee (dec_ag_*) qui importe une grammaire asx (*.asx) il faut importer tous les modules de declaration (dec_*) que la grammaire asx importe. Sinon, les types importes par le module asx ne sont pas corrrectement connus (d'ou le message).


Number:         [VASY-FNC2-34]
Report:         Mihaela Sighireanu
Tool:           mkfnc2
Status:         FIXED v1.17

Si on utilise une grammaire concrete ayant plus de 10 composantes (terminaux ou non terminaux), mkfnc2 ne genere pas un XXXX.MKFNC2 correct, car il prend l'option par defaut rhs 10. Il faut modifier a la main dans XXXX.MKFNC2 pour changer cette option.

Un autre probleme apparait a la generation des regles de compilation pour les grammaires attribuees generatrice de l'arbre. Plus precisement, l'arbre de sortie n'est pas compile.


Number:         [VASY-FNC2-35]
Date:           Mon, 31 Aug 1998 09:44:36
Report:         Xavier Bouchoux
Tool:           ppat v1.16
Status:         FIXED v1.17

Le ppat plante quant on essaye d'afficher des strings plus longs que 512 caracteres. Dans file_b.c sous $f2/src :

#define SIZE_BUFFEUR 512


Number:         [VASY-FNC2-36]
Date:           Thu, 03 Sep 1998 11:54:46 +0200
Report:         Xavier Bouchoux
Tool:           fnc2 (v1.17)
Status:         FIXED (v1.17)

La compilation C plante (fonctions et types non definis) car la compilation de la grammaire attribuee generee avec ppat fait un core dump.

o-o-o-o-o

        ag_[.....] 
        Translator of semantic rules (Bootstrapped) 
        :rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
        
        : 0.28 
        
                Listing Output (Olga) 
                                Listing Output (Evaluator generator) 
                Close (Olga) 
                                Close (Evaluator generator)gmake[1]: *** 
        [../src_fnc2/lotosnt__flat__passe2_auto.c] Bus Error (core dumped) 
        gmake[1]: Leaving directory `/local_home/users/bouchoux/Code/tmp'

o-o-o-o-o

Repose Didier Parigot :

Sous Code/tmp lance

fnc2 -H ../incl_fnc2/ -C ../src_fnc2/ ag_lotosnt-flat-passe2.olga Cela passera.

...
Bon ca marche maintemant en Sun5 (avec l'option -ntotal)

Ton exemple m'a montrer que j'avais laissé quelque part ds le code du code incorrect pour Sun5.


Number:         [VASY-FNC2-37]
Date:           Thu, 21 August 1998 11:54:46 +0200
Report:         Xavier Bouchoux
Tool:           fnc2, ppat (v1.17)              
Status:         FIXED (v1.17)

Si le fichier ppat ne continent pas toutes les entrees de l'arbre abstrait, la compilation passe sans problemes, mais l'executable produit donne des resultats aleatoires et faux.

Il faut ecrire le "where ... -> ... pprint ..." pour tous les noeuds de l'arbre d'entree. Un fichier ppat avec toutes les entrees peut etre genere a partie de cet arbre en appelant "asx_to_ppat < toto.asx > toto.ppat" dans tmp.


Number:         [VASY-FNC2-39]
Date:           Wed, 16 Sep 1998 14:02:47 +0200
Report:         Christophe Discours
Tool:           fnc2 (v1.17)
Status:         FIXED (v1.17)

Dans la derniere version 1.17 (celle qu'a installe Hubert lundi 14/09), j'ai un attribut compose qui disparait ou est modifie. Je joins en attachement un repertoire SVL avec dans le repertoire 'tests' le source dans lequel le probleme se manifeste (demo_16.svl) ainsi que le script correct que svl devrait produire (demo_16.ok).

Le fichier demo_16.svl (un peu verbeux, mais c'est essentiellement du commentaire...) consiste principalement en un noeud 'comparison' au dessus de deux noeuds 'beh_reduce'. Le probleme vient de l'attribut 'method' qui est de type 'compound' chaine de caracteres. Par defaut il vaut "std" mais le 'STMT' 'set_default_method' le positionne a "bdd". On peut verifier dans le fichier SVL_debug1 qu'il vaut bien "bdd" dans le noeud 'comparison' et dans le premier noeud 'beh_reduce'. Par contre dans le deuxieme noeud 'beh_reduce' on a :

...

C'est a dire que $h.method vaut n'importe quoi (une autre fois, avant que je fasse des modifs dans mon code, il valait rien...). Et le code du script genere en est modifie en consequences (les deux appels aux reductions n'ont pas les memes parametres).

Lorsque je cree svl avec l'ancienne version 1.17 je n'ai pas ce probleme.


Number:         [VASY-FNC2-40]
Date:           Fri, 02 Oct 1998 09:58:08 +0200
Report:         Mihaela Sighireanu
Tool:           fnc2 (v1.17)

Traduction incorrecte en C des expressions booleenes. La compilation C echoue.

Le code genere pour des expressions booleenes de type

a (and b)^*

est incorrect si un de b est une expression de type "if ... then .. else".

Exemple : La fonction suivante (fichier "spec/def_processor_c_sort.olga", 216)

...

        function GENERATE_C_PREDEFINED_PRINT_F1_Fn (S : TYPE_SORT; 
                F1_Fn : TYPE_OPERATION_LIST; ENV : TYPE_ENVIRONMENT)
                : bool is
        if empty (F1_Fn) then
                true
        else let F1 := head (F1_Fn) in
                OUTPUT_STRING ("case TRAIAN_ADT_CASE_" + 
                OPERATION_IMPLEMENTATION_WITHOUT_COMMENT(F1) + ":\n") and
        { **** bug 40 **** }
                if empty (F1.BINDING.ARGUMENT_V1_Vn) then
                        OUTPUT_STRING ("fprintf (TRAIAN_ADT_FILE, \"" + 
                        string (F1.SPELLING) + "\");\n")
                else
                        OUTPUT_STRING ("fprintf (TRAIAN_ADT_FILE, \"" + 
                        string (F1.SPELLING) + " (\");\n") and
                        GENERATE_C_PREDEFINED_PRINT_V1_Vn 
                                (F1.BINDING.ARGUMENT_V1_Vn, S, F1, ENV)
                end if and
                OUTPUT_STRING ("break;\n") and
                GENERATE_C_PREDEFINED_PRINT_F1_Fn (S, tail (F1_Fn), ENV)
        end if

end function;
...

est traduite en C (src_fnc2/processor_c_sort_b_df.c, 182) mais la variable "father" n'est pas definie.

...

        static BOOLEAN GENERATE_C_PREDEFINED_PRINT_F1_Fn(S,F1_Fn,ENV)
        struct TYPE_SORT *S;
        struct f2___list *F1_Fn;
        struct TYPE_ENVIRONMENT *ENV;
        {
        if (empty (F1_Fn))
        return true;
        else
        {
        struct TYPE_OPERATION *F1;
        F1 = ((struct TYPE_OPERATION *)head (F1_Fn));
        if (OUTPUT_STRING(plus___string(plus___string("case TRAIAN_ADT_CASE_",OPERATION_IMPLEMENTATION_WITHOUT_COMMENT(F1)),":\n")))
        {
        if (empty (F1->BINDING->ARGUMENT_V1_Vn))
        return OUTPUT_STRING(plus___string(plus___string("fprintf (TRAIAN_ADT_FILE, \"", string___token(F1->SPELLING)),"\");\n"));
        else
        return OUTPUT_STRING(plus___string(plus___string("fprintf (TRAIAN_ADT_FILE, \"",
        string___token(F1->SPELLING))," (\");\n")) && GENERATE_C_PREDEFINED_PRINT_V1_Vn( F1->BINDING->ARGUMENT_V1_Vn,S,F1,ENV);
        return (father && (OUTPUT_STRING("break;\n") && GENERATE_C_PREDEFINED_PRINT_F1_Fn(S,tail (F1_Fn),ENV)));
        }
        else
        return false;
        }
        }

...


Number:         [VASY-FNC2-41]
Date:           Fri, 02 Oct 1998 09:58:08 +0200
Report:         Mihaela Sighireanu
Tool:           fnc2 (v1.17)
Status:         FIXED in v1.18

Core dump lors de l'execution de TRAIAN sur tests/syntax:012.lotnt, pendant la phase de generation de code pour les fonctions (ppat lotosnt_flat_passe5.ppat).

...

        traian:          - flattening of ``tests/syntax:012.lotnt''
        traian:          - checking of ``tests/syntax:012.lotnt''
        traian:  generation of ``syntax:012_t.h''
        traian:  indentation of ``syntax:012_t.h''
        traian:  generation of ``syntax:012_df.h''
        Segmentation Fault - core dumped
        Error@2061: Stuff missing from end of file.
        *** validation [VASY-FNC2-42] achevee
        <thalweg:206> dbx bin/sun5/traian core
        Reading symbolic information for traian
        core file header read successfully
        Reading symbolic information for rtld /usr/lib/ld.so.1
        Reading symbolic information for libc.so.1
        Reading symbolic information for libdl.so.1
        Reading symbolic information for libc_psr.so.1
        program terminated by signal SEGV (no mapping at the fault address)
        (dbx) where                                                                  
        =>[1] strcat(0xc80000, 0xc7fe01, 0x330000, 0x330000, 0x330390, 0x20), at 0xef75399c
        [2] print_string(0x330d88, 0x2a6, 0x1, 0x8, 0x40000, 0x0), at 0x2dd990
        [3] write__at(0x330d88, 0x2c5, 0x90, 0x2a6, 0x91, 0x3205f8), at 0x2ddd58

...

Reponse Didier Parigot : C'est un probleme de taille du tampon de sortie de PPAT. Cette taille doit etre modifie chaque fois que le PPAT que vous ecrivez utilise plus de memoire!!


Number:         [VASY-FNC2-43]
Date:           Fri Oct 23 17:16:58 MET DST 1998
Report:         Hubert Garavel
Tool:           fnc2 (v1.17)
Status:         FIXED in v1.18

A la phase de COMPILATION de FNC2, la compilation finale de l'executable et l'edition de liens utilisent seulement la variable d'environnement LDFLAGS et pas CCFLAGS. Or, c'est CCFLAGS qui contient l'option "-g" pour le debug. Actuellement, on introduit l'option "-g" dans les LDFLAGS pour faire du debug.

De plus, le message affiche par le shell FNC2 est trompeur, car il ne correspond pas a la commande appelee.

Proposition: Il faut appeler la compilation finale avec CCFLAGS et LDFLAGS et afficher la vrais commende "cc" appelee.

En v1.18, les LDFLAGS contiennent l'option -g lorsqu'on fait du debug et la vraie commande cc est affichee.


Number:         [VASY-FNC2-44]
Date:           Wed, 28 Oct 1998
Report:         Christophe Discours
Tool:           fnc2
Status:         FIXED in v1.18

Il me semble avoir trouve un probleme avec les operateurs logiques dans un fichier ppat. Normalement j'utilise les operateurs '&' et '|' pour construire les conditions. Mais j'ai eu un probleme avec une condition qui s'ecrivait de la maniere suivante :

        if (($shell_to_erase = "premier") &
        (($shell_in_filename != $shell_out_filename) |
        ($shell_out_format(BEHAV) != $shell_out_format))) then ...

et j'ai un cas ou :
$shell_to_erase = "premier",
$shell_in_filename et $shell_out_filename sont egaux et $shell_out_format(BEHAV) et $shell_out_format sont differents. Dans ce cas la condition devrait s'evaluer a vrai, mais ce n'est pas le cas... Par contre si je remplace le '|' par un 'or' ca marche :

        if (($shell_to_erase = "premier") &
        (($shell_in_filename != $shell_out_filename) or
        ($shell_out_format(BEHAV) != $shell_out_format))) then ...

Number:         [VASY-FNC2-45]
Date:           Wed, 02 Dec 1998
Report:         Mihaela Sighireanu 
Tool:           atc
Status:         FIXED in v1.18

La phase de CONSTRUCTION se passe sans erreurs, la phase de COMPILATION de me^me, mais a l'edition de liens j'obtient le message suivant :

        BINARY
        cc -o /local_home/users/sighirea/DC/bin/sun5/dc2syn
        Undefined                       first referenced
        symbol                             in file
        f2___op_fixed_10                   
        /local_home/users/sighirea/DC/lib/sun5/dc-in_atc.o
        f2___op_fixed_9                    
        /local_home/users/sighirea/DC/lib/sun5/dc-in_atc.o
        ld: fatal: Symbol referencing errors. No output written to
        /local_home/users/sighirea/DC/bin/sun5/dc2syn
        rm: /local_home/users/sighirea/DC/bin/sun5/dc2syn: No such file or
        directory
        gmake: *** [/local_home/users/sighirea/DC/bin/sun5/dc2syn] Error 1

J'ai regarde dans le src_fnc2/dc-in_atc.c, et ces fonctions est utilise pour definir des noeuds ayant 9 resp. 10 parametres. Ce qui me semble etre un bug de FNC-2.


Number:         [VASY-FNC2-46]
Date:           Fri Oct 23 17:16:58 MET DST 1998
Report:         Christophe Discours
Tool:           ppat (v1.17)
Status:         FIXED (v1.18)

Le code genere en utilisant des 'and' et des 'or' est sensiblement different de celui genere par des '&' et des '|'. Les deux espressions ne sont pas parenthesees de la meme facon et la version "and" et "or" ne respecte pas le sens original.


Number:         [VASY-FNC2-47]
Date:           Wed, 02 Dec 1998
Report:         Christophe Discours
Tool:           ppat
Status:         FIXED in v1.18

Dans certains cas, ppat genere des fichiers .olga erronees. C'est la cas par exemple avec mon fichier SVL-debug1.ppat. On a :

        ''ppat  -H ../incl_fnc2/ -C ../src_fnc2/ -A ../f2aux/ ../spec/SVL-debug1.ppat
        Release 1.17 of (98/09/01 10:55:41)
        ../spec/SVL-debug1.ppat:
        Scanner & Parser & Abstract Tree

etc. etc.
puis :

        ''fnc2 -H ../incl_fnc2/ -C ../src_fnc2/ dec_SVL-debug1.olga
        Release 1.17 of (98/09/01 10:55:41)
        dec_SVL-debug1.olga:
                Scanner & Parser & Abstract Tree: 0.00

etc. etc.
et pour finir :

        ''fnc2 -ntotal -H ../incl_fnc2/ -C ../src_fnc2/ ag_SVL-debug1.olga
        Release 1.17 of (98/09/01 10:55:41)
        ag_SVL-debug1.olga:
                Scanner & Parser & Abstract Tree
        and
        ^
        ag_SVL-debug1.olga, line 17: column 2: Warning: "and" is replaced by "inline".

Ce probleme semble lie a l'utilisation de 'wheretype' dans le fichier .ppat.


Number:         [VASY-FNC2-48]
Date:           Wed, 02 Dec 1998
Report:         Christophe Discours
Tool:           fnc2
Status:         Documentation modified (v1.18)

Probleme avec les fonctions externes declarees dans la definition d'une fonction (exemple : page 101 du manuel de Fnc2). A la compilation du fichier C correspondant on obtient (il s'agit de mon fichier def_SVL-types.olga) :

        "src_fnc2/SVL__types_b_df.c", line 14: warning: improper pointer/integer combination: arg #1
        [...]
        "src_fnc2/SVL__types_b_df.c", line 109: warning: improper pointer/integer combination: arg #1
        "src_fnc2/SVL__types_b_df.c", line 117: warning: improper pointer/integer combination: op "="
        [...]
        "src_fnc2/SVL__types_b_df.c", line 449: warning: improper pointer/integer combination: op "="

Si au lieu de suivre l'exemple du manuel, on declare les fonctions externes en dehors des definitions des fonctions olga ca se passe bien. Le probleme c'est que le type des fonctions est defini dans le fichier "SVL__types_b_df.h". Lorsque les fonctions externes sont declarees "en dehors" (c'est a dire au meme niveau que les autres fonctions), elles sont correctement declares en C dans ce fichier. Lorsqu'elle sont declarees a l'interieur des fonctions qui les utilisent (comme recommande dans le manuel...) elles sont purement et simplement ignorees au niveau du code C.


Back to the VASY Home Page