🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Pierre Laplante Fri, 09 Jun 1989 13:09
bison
#1664
Author: Pierre Laplante
Date: Fri, 09 Jun 1989 13:09
684 lines
24148 bytes
One of our user got a problem with his bison file.
I got the following output when I run bison with the following file:

-- output --

Script started on Fri Jun  9 09:05:31 1989
laplante has logged on console.
[richelieu:101] bison xxx
xxx contains 23 useless nonterminals and 72 useless rules.
internal error, map_goto
IOT trap (core dumped)
[richelieu:102] exit

script done on Fri Jun  9 09:05:40 1989

-- file --
%{                                                      
# include "stdio.h"                                   
# include "ctype.h"                                   
# include "math.h"                                    
/* NOM        : decl_type.h
   --- 

   FONCTION   : Contient des definitions de structures.
   --------

   DEPEND DE  : Rien.
   ---------

   CREATION   : Ete 84.
   --------

   AUTEUR     : Michel Deslauriers (groupe de recherche sur les protocoles,
   ------       de l'Universite de Montreal).

   PROJET     : Developpement d'outils ASN1. 
   ------

*/



struct generated_number { int  first_value,
                               second_value;
                        };

typedef struct noeud_type                   /* Cette structure sert pour les */
               { unsigned nt_classe:2;      /* noeuds qui constituent l'ar-  */
                 unsigned nt_bidon:1;       /* bre des types                 */
                 unsigned nt_primitif:1;
                 unsigned nt_constructor:1;
                 unsigned nt_idnt_genere:1;
                 unsigned outside_type:1; 
                 unsigned nt_implicit:1;
                 unsigned nt_optionnel:1;
                 char     nt_vers_type[41];
                 char     nt_identif[41];
                 char     nt_type[41];
                 char     nt_type_affiche[41];
                 char     *nt_pt_presentation;
                 char     *nt_pt_explication;
                 char     *nt_pt_valeur_defaut;
                 unsigned nt_standard:1;
                 int      nt_code_id;
                 int      test;
                 struct   generated_number  *generated_number;
                 struct   noeud_type        *nt_pt_fils; 
                 struct   noeud_type        *nt_pt_affiche;
                 struct   noeud_type        *nt_pt_frere; 
                 struct   sur_pere          *nt_pt_sur_pere;
                 struct   liste_association *nt_pt_association;
               } NOEUD_TYPE, *PTE_NOEUD_TYPE; 

struct noeud_valeur                    /* Cette structure sert pour les  */
       { unsigned nv_rattache:1;       /* noeuds qui constituent l'arbre */
         unsigned nv_erreur:1;         /* des valeurs                    */
         unsigned nv_marque:1;
         long     nv_longueur;
         long     nv_lng_tot;
         short    ligne;
         short    niveau;
         unsigned nv_en_erreur:1;
         char     *nv_pt_contenu;
         struct   noeud_type   *nv_pt_type;
         struct   noeud_valeur *nv_pt_fils;
         struct   noeud_valeur *nv_pt_frere;
       };

typedef struct liste_association                 /* Sert a empiler une liste */
               { int    la_valeur;               /* d'associations du genre  */
                 char   la_interpretation[41];   /* {haut (1),bas (0)}       */
                 struct liste_association *pt_frere;
               } PILE_ASSOC, *PTE_ASSOC;
                                                        
# undef  YYMAXDEPTH                                     
# define YYMAXDEPTH  99999                              
                                                        
 struct pt_type_stack { struct pt_type_stack *next;     
                        struct noeud_type    *pt_type;  
                        int                  son_done;  
                        struct pt_type_stack *previous; 
                      };                                
 struct pt_type_stack       *pt_type_stack_top;         
                                                        
 struct noeud_valeur        *la_pdu,                    
                            *pt_val,                    
                            *pt_val_1,                  
                            *save_pt,                   
                            *pt_1,                      
                            *pt_2,                      
                            *pt_3;                      
 extern struct noeud_valeur *par_valeur_ptr;            
 struct noeud_type          *pt_type;                   
 static short               compteur,                   
                            option = 1,                 
                            a_first,                    
                            son;                        
 extern short               pushable;                   
                                                        
 extern struct noeud_type   *root_pt_type;              
 extern long                par_1long_chaine;           
 extern char                *par_1chaine_ptr;           
%}                                                      
                                                        
%start T_PDU                                                        
                                                        
%union { char                 text_1[80];               
         char                 *text_2;                  
         int                  integer;                  
         struct noeud_valeur  *pointer;                 
       }                                                
                                                        
%type <pointer> T_Bool
T_OCTETSTRING
T_Bitstring
T_Integer
T_Null
T_Not_Present
T_NumericString
T_PrintableString
T_TeletexString
T_T61String
T_VideotexString
T_VisibleString
T_IA5String
T_GeneralString
T_GraphicString
T_GeneralizedTime
T_UTCTime
T_PDU
T_Type1
%type <text_2>  T_DecString T_OctetString T_DecimalDigit
                T_Boolean T_Octet T_BitStringPlusThOf T_Bit
%type <integer> T_DecNatRepr T_Nat T_NatNumberPlusNeg
%token <text_1>    Null Not_Present            PDU 
Dec String Reverse NatNum Pred thof Succ Length Octet
Bit Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Bit8
and eq ne not or true false xor implies iff 


%%

T_Bitstring : T_BitStringPlusThOf
{ push_pt_type_stack ("Bitstring");
packbit ($1);
valeur (pt_type_stack_top->pt_type,par_1long_chaine,par_1chaine_ptr);
$$ = par_valeur_ptr;
};

T_Integer : T_NatNumberPlusNeg
{ push_pt_type_stack ("Integer");
valeur (pt_type_stack_top->pt_type,1,&$1);
$$ = par_valeur_ptr;
};

T_Null : Null
{ push_pt_type_stack ("NULL");
  noeudval (pt_type_stack_top->pt_type);
  $$ = par_valeur_ptr;
}
;

T_Not_Present : Not_Present { $$ = NULL; }
;

T_NumericString : T_OctetString
{ push_pt_type_stack ("NumericString");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_PrintableString : T_OctetString
{ push_pt_type_stack ("PrintableString");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_TeletexString : T_OctetString
{ push_pt_type_stack ("TeletexString");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_T61String : T_OctetString
{ push_pt_type_stack ("T61String");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_VideotexString : T_OctetString
{ push_pt_type_stack ("VideotexString");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_VisibleString : T_OctetString
{ push_pt_type_stack ("VisibleString");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_IA5String : T_OctetString
{ push_pt_type_stack ("IA5String");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_GeneralString : T_OctetString
{ push_pt_type_stack ("GeneralString");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_GraphicString : T_OctetString
{ push_pt_type_stack ("GraphicString");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_GeneralizedTime : T_OctetString
{ push_pt_type_stack ("GeneralizedTime");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_UTCTime : T_OctetString
{ push_pt_type_stack ("UTCTime");
valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
$$ = par_valeur_ptr;
};

T_PDU : PDU '('  { push_pt_type_stack ("PDU");
}
T_Integer ',' T_Bool ',' T_Type1 ')' 
{ pop_pt_type_stack (3);
  pt_type = pt_type_stack_top->pt_type;
  pt_val  = $4;                                     
  pt_val_1 = pt_val;                                
  son = 0;                                          
  a_first = 0;                                      
  if (!pere_bidon ())                               
     { noeudval (pt_type);                          
       $$ = par_valeur_ptr;                         
       if (node_in_between (pt_type,pt_val))        
          { noeudval (pt_type->nt_pt_fils);         
            par_valeur_ptr->nv_pt_fils = pt_val;    
            $$->nv_pt_fils = par_valeur_ptr;        
          }                                         
       else { $$->nv_pt_fils = pt_val;              
              if (pt_val == NULL)                   
                 { pt_val_1 = par_valeur_ptr;       
                   son = 1;                         
                 }                                  
            }                                       
     }                                              
  else if (node_in_between (pt_type,pt_val))        
          { noeudval (pt_type->nt_pt_fils);         
            par_valeur_ptr->nv_pt_fils = pt_val;    
            $$ = par_valeur_ptr;                    
          }                                         
       else if (pt_val != NULL)                     
               $$ = pt_val;                         
            else { son = 1;                         
                   a_first = 1;                     
                 }                                  
if ($6 != NULL)                                 
   { if (son)                                    
        if (a_first)                             
           { a_first = 0;                        
             son     = 0;                        
      if (node_in_between (pt_type,$6))         
         { noeudval (pt_type->nt_pt_fils);       
           $$ = par_valeur_ptr;                  
           $$->nv_pt_fils = $6;                 
         }                                       
      else $$ = $6;                             
             pt_val_1 = $$;                      
           }                                     
        else { son = 0;                          
         if (pt_val == NULL                      
             &&                                  
             node_in_between (pt_type,$6)       
            )                                    
            { noeudval (pt_type->nt_pt_fils);    
              par_valeur_ptr->nv_pt_fils = $6;  
              $$->nv_pt_fils = par_valeur_ptr;   
              pt_val = par_valeur_ptr;           
              pt_val_1 = $6;                    
            }                                    
         else { pt_val_1->nv_pt_fils = $6;      
                pt_val_1 = pt_val_1->nv_pt_fils; 
              }                                  
             }                                   
          else { pt_val_1->nv_pt_frere = $6;    
                 pt_val_1=pt_val_1->nv_pt_frere; 
               }                                 
     }                                           
if ($8 != NULL)                                 
   { if (son)                                    
        if (a_first)                             
           { a_first = 0;                        
             son     = 0;                        
      if (node_in_between (pt_type,$8))         
         { noeudval (pt_type->nt_pt_fils);       
           $$ = par_valeur_ptr;                  
           $$->nv_pt_fils = $8;                 
         }                                       
      else $$ = $8;                             
             pt_val_1 = $$;                      
           }                                     
        else { son = 0;                          
         if (pt_val == NULL                      
             &&                                  
             node_in_between (pt_type,$8)       
            )                                    
            { noeudval (pt_type->nt_pt_fils);    
              par_valeur_ptr->nv_pt_fils = $8;  
              $$->nv_pt_fils = par_valeur_ptr;   
              pt_val = par_valeur_ptr;           
              pt_val_1 = $8;                    
            }                                    
         else { pt_val_1->nv_pt_fils = $8;      
                pt_val_1 = pt_val_1->nv_pt_fils; 
              }                                  
             }                                   
          else { pt_val_1->nv_pt_frere = $8;    
                 pt_val_1=pt_val_1->nv_pt_frere; 
               }                                 
     }                                           
  la_pdu = $$;
}
;

T_Type1 : { push_pt_type_stack ("Type1");
if ((pt_type_stack_top->pt_type->nt_pt_fils == NULL
     &&
     pt_type_stack_top->pt_type->nt_pt_frere == NULL
    )
    ||
    (pt_type_stack_top->pt_type->nt_bidon
     &&
     terminal_type (pt_type_stack_top->pt_type->nt_pt_fils->nt_type)
    )
   )
   { option = 2;
     pushable = 0;
   }
}
T_Integer
{switch (option)
{ case 1 :
 pop_pt_type_stack (1);                                 
  pt_type = pt_type_stack_top->pt_type;                 
  if (!pere_bidon ())                                   
     { noeudval (pt_type);                              
       $$ = par_valeur_ptr;                             
       if (node_in_between (pt_type,$2))                
          { noeudval (pt_type->nt_pt_fils);             
            par_valeur_ptr->nv_pt_fils = $2;            
            $$->nv_pt_fils = par_valeur_ptr;            
          }                                             
       else $$->nv_pt_fils = $2;                        
     }                                                  
  else if (node_in_between (pt_type,$2))                
          { noeudval (pt_type->nt_pt_fils);             
            par_valeur_ptr->nv_pt_fils = $2;            
            $$ = par_valeur_ptr;                        
          }                                             
       else $$ = $2;                                    
break;

case 2 :
$$ = $2;
option = 1;
break;
}
  };

/* NAME         : yacc.rest 
   ----

   FUNCTION     : - Contains predined Yacc rules for librairy's types 
   --------         such Boolean, NaturalNumber etc ...

                  - Contains an inclusion of the file generated_lex.c
                    which contains the lexical analyser generated from
                    the Lex specification which has been generated by
                    the generator. 

                  - The content of this file is used to complete the
                    Yacc specification that the generator module generates.

   DEPENDS ON   : Nothing. 
   ----------

   CREATION     : November '88 (last revised February '89).
   --------

   AUTHOR       : Michel Deslauriers
   ------         (protocol research group of Universite de Montreal).

   PROJECT      : For Lotos research.
   -------

*/


T_Bool : T_Boolean
         { push_pt_type_stack ("BOOLEAN");
           valeur (pt_type_stack_top->pt_type,1,$1);
           $$ = par_valeur_ptr;
         };

T_Boolean : true
            { F_1 (&$$,"","V"); }
            |
            false
            { F_1 (&$$,"",""); }
            |
            not '(' T_Boolean ')'
            { if ($3[0] == 'V')
                 F_1 (&$$,"","");
              else F_1 (&$$,"","V");
            }
            |
            and '(' T_Boolean ',' T_Boolean ')'
            { if ($3[0] == 'V'
                  &&
                  $5[0] == 'V'
                 )
               F_1 (&$$,"","V");
              else F_1 (&$$,"","");
            }
            |
            or '(' T_Boolean ',' T_Boolean ')' 
            { if ($3[0] != 'V'
                  &&
                  $5[0] != 'V'
                 )
                 F_1 (&$$,"","");
              else F_1 (&$$,"","V");
            }
            |
            xor '(' T_Boolean ',' T_Boolean ')'
            { if ($3[0] != $5[0])
                 F_1 (&$$,"","V");
              else F_1 (&$$,"","");
            }
            |
            implies '(' T_Boolean ',' T_Boolean ')'
            { if ($3[0] == 'V'
                  &&
                  $5[0] != 'V'
                 )
                 F_1 (&$$,"","");
              else F_1 (&$$,"","V");
            }
            |
            iff '(' T_Boolean ',' T_Boolean ')'
            { if ($3[0] != $5[0])
                 F_1 (&$$,"","");
              else F_1 (&$$,"","V");
            }
            |
            eq '(' T_Boolean ',' T_Boolean ')'
            { if ($3[0] != $5[0])
                 F_1 (&$$,"","");
              else F_1 (&$$,"","V");
            }
            |
            ne '(' T_Boolean ',' T_Boolean ')'
            { if ($3[0] != $5[0])
                 F_1 (&$$,"","V");
              else F_1 (&$$,"","");
            };

T_DecNatRepr : T_Nat ;

T_Nat       : '*' '(' T_Nat ',' T_Nat ')'
              { $$ = $3 * $5; }
              |
              '*' '*' '(' T_Nat ',' T_Nat ')'
              { $$ = power ($4,$6); }
              |
              '+' '(' T_Nat ',' T_Nat ')'
              { $$ = $3 + $5; }
              |
              '-' '(' T_Nat ',' T_Nat ')'
              { $$ = $3 - $5; }
              |
              '0'
              { $$ = 0; }
              |
              Length '(' T_DecString ')'
              { $$ = strlen ($3); }
              |
              Succ '(' T_Nat ')'
              { $$ = $3 + 1; }
              |
              NatNum '(' T_DecString ')'
              { $$ = atoi ($3); };

T_NatNumberPlusNeg : '*' '(' T_NatNumberPlusNeg ',' T_NatNumberPlusNeg ')'
                     { $$ = $3 * $5; }
                     |
                     '*' '*' '(' T_NatNumberPlusNeg ',' T_NatNumberPlusNeg ')'
                     { $$ = power ($4,$6); }
                     |
                     '+' '(' T_NatNumberPlusNeg ',' T_NatNumberPlusNeg ')'
                     { $$ = $3 + $5; }
                     |
                     '-' '(' T_NatNumberPlusNeg ',' T_NatNumberPlusNeg ')'
                     { $$ = $3 - $5; }
                     |
                     '0'
                     { $$ = 0; }
                     |
                     Succ '(' T_NatNumberPlusNeg ')'
                     { $$ = $3 + 1; }
                     |
                     Pred '(' T_NatNumberPlusNeg ')' 
                     { $$ = $3 - 1; };

T_DecString : '+' '(' T_DecimalDigit ',' T_DecString ')'
              { F_1 (&$$,$3,$5); }
              |
              '+' '+' '(' T_DecString ',' T_DecString ')'
              { F_1 (&$$,$4,$6); }
              |
              Dec '(' T_DecimalDigit ')'
              { F_1 (&$$,"",$3); }
              |
              Reverse '(' T_DecString ')'
              { F_2 (&$$,$3); };

T_DecimalDigit : '0' { F_1 (&$$,"","0"); } |
                 '1' { F_1 (&$$,"","1"); } |
                 '2' { F_1 (&$$,"","2"); } |
                 '3' { F_1 (&$$,"","3"); } |
                 '4' { F_1 (&$$,"","4"); } |
                 '5' { F_1 (&$$,"","5"); } |
                 '6' { F_1 (&$$,"","6"); } |
                 '7' { F_1 (&$$,"","7"); } |
                 '8' { F_1 (&$$,"","8"); } |
                 '9' { F_1 (&$$,"","9"); } |
                 Succ '(' T_DecimalDigit ')'
                 { F_3 (&$$,$3); };

T_OCTETSTRING : T_OctetString
                { push_pt_type_stack ("OCTETSTRING");
                  valeur (pt_type_stack_top->pt_type,strlen ($1),$1);
                  $$ = par_valeur_ptr;
                };

T_OctetString : '+' '(' T_Octet ',' T_OctetString ')'
                { F_1 (&$$,$3,$5); }
                |
                '+' '+' '(' T_OctetString ',' T_OctetString ')'
                { F_1 (&$$,$4,$6); }
                |
                '<' '>'
                { F_1 (&$$,"",""); }
                |
                Octet '(' T_Octet ')'
                { F_1 (&$$,"",$3); }
                |
                Reverse '(' T_OctetString ')'
                { F_2 (&$$,$3); };

T_Octet : Octet '(' T_Bit ',' T_Bit ',' T_Bit ',' T_Bit ','
                    T_Bit ',' T_Bit ',' T_Bit ',' T_Bit
                ')'
          { F_5 (&$$,$3,$5,$7,$9,$11,$13,$15,$17); };

T_BitStringPlusThOf :'+' '(' T_Bit ',' T_BitStringPlusThOf ')'
                     { F_1 (&$$,$3,$5); }
                     |
                     '+' '+' '(' T_BitStringPlusThOf ',' T_BitStringPlusThOf ')'
                     { F_1 (&$$,$4,$6); }
                     |
                     Bit '(' T_Bit ')'
                     { F_1 (&$$,"",$3); }
                     |
                     Reverse '(' T_BitStringPlusThOf ')'
                     { F_2 (&$$,$3); };

T_Bit : '0' { F_1 (&$$,"","0"); }
        |
        '1' { F_1 (&$$,"","1"); }
        |
        '<' '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$3,$5,1); }
        |
        '<' '>' '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$4,$6,2); }
        |
        '=' '<' '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$4,$6,3); }
        |
        '=' '=' '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$4,$6,4); }
        |
        '>' '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$3,$5,5); }
        |
        '>' '=' '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$4,$6,6); }
        |
        Bit1 '(' T_Octet ')'
        { F_7 (&$$,$3,1); }
        |
        Bit2 '(' T_Octet ')'
        { F_7 (&$$,$3,2); }
        |
        Bit3 '(' T_Octet ')'
        { F_7 (&$$,$3,3); }
        |
        Bit4 '(' T_Octet ')'
        { F_7 (&$$,$3,4); }
        |
        Bit5 '(' T_Octet ')'
        { F_7 (&$$,$3,5); }
        |
        Bit6 '(' T_Octet ')'
        { F_7 (&$$,$3,6); }
        |
        Bit7 '(' T_Octet ')'
        { F_7 (&$$,$3,7); }
        |
        Bit8 '(' T_Octet ')'
        { F_7 (&$$,$3,8); }
        |
        Succ '(' T_Bit ')'
        { F_8 (&$$,$3); }
        |
        and '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$3,$5,7); }
        |
        eq '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$3,$5,4); }
        |
        ne '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$3,$5,2); }
        |
        not '(' T_Bit ')'
        { F_8 (&$$,$3); }
        |
        or '(' T_Bit ',' T_Bit ')'
        { F_6 (&$$,$3,$5,8); }
        |
        thof '(' T_Nat ',' T_BitStringPlusThOf ')'
        { F_9 (&$$,$3,$5); };


%%


# include "generated_lex.c"

-- 

Pierre Laplante	 				
Universite de Montreal, Dep. I.R.O. X-220, C.P. 6128, succursale A
Montreal (Quebec) H3C 3J7, (514) 343-6830, laplante@iro.umontreal.ca 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads