Thread View: gnu.utils.bug
1 messages
1 total messages
Started by Pierre Laplante
Fri, 09 Jun 1989 13:09
bison
Author: Pierre Laplante
Date: Fri, 09 Jun 1989 13:09
Date: Fri, 09 Jun 1989 13:09
684 lines
24148 bytes
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