English keywords support for RDS file (courtesy of Frederic Petrot).

This commit is contained in:
Jean-Paul Chaput 2019-03-21 11:09:40 +01:00
parent c5d9fbe540
commit 7a8824dd34
6 changed files with 1391 additions and 367 deletions

View File

@ -1,4 +1,3 @@
%option noinput
%option nounput
@ -39,6 +38,15 @@ int yylineno;
: yytchar)
#endif
void DrucEcho ( char *text )
{
if ( DrucStructStat.FLAG_VIEW_RULE_MODE == DRUC_VERBOSE )
{
DrucViewString ( text );
}
}
%}
%p 3000
@ -61,137 +69,217 @@ comment [#]({lettre}*{dec}*{esp}*{pct}*)*{rc}
%%
{blanc} { DrucEcho ( yytext );
}
layer { DrucEcho ( yytext );
return(DRUC_LAYER);}
regle { DrucEcho ( yytext );
return(DRUC_REGLE);}
regles { DrucEcho ( yytext );
return(DRUC_REGLES);}
fin { DrucEcho ( yytext );
return(DRUC_FIN);}
define { DrucEcho ( yytext );
return(DRUC_DEFINE);}
undefine { DrucEcho ( yytext );
return(DRUC_UNDEFINE);}
caracterise { DrucEcho ( yytext );
return(DRUC_CARACTERISE);}
relation { DrucEcho ( yytext );
return(DRUC_RELATION);}
resize { DrucEcho ( yytext );
return(DRUC_RESIZE);}
exclusion { DrucEcho ( yytext );
return(DRUC_EXCLUSION);}
union { DrucEcho ( yytext );
return(DRUC_UNION);}
enveloppe { DrucEcho ( yytext );
return(DRUC_ENVELOPPE);}
marge { DrucEcho ( yytext );
return(DRUC_MARGE);}
croix { DrucEcho ( yytext );
return(DRUC_CROIX);}
intersection { DrucEcho ( yytext );
return(DRUC_INTERSECT);}
extension { DrucEcho ( yytext );
return(DRUC_EXTENSION);}
inclusion { DrucEcho ( yytext );
return(DRUC_INCLUSION);}
distance { DrucEcho ( yytext );
return(DRUC_DISTANCE);}
surface_inter { DrucEcho ( yytext );
return(DRUC_SURFACE_INTER);}
longueur_inter { DrucEcho ( yytext );
return(DRUC_LONG_INTER);}
largeur_inter { DrucEcho ( yytext );
return(DRUC_LARGE_INTER);}
penetre_inter { DrucEcho ( yytext );
return(DRUC_PENET_INTER);}
parallele_inter { DrucEcho ( yytext );
return(DRUC_PARAL_INTER);}
perpendiculaire_inter { DrucEcho ( yytext );
return(DRUC_PERPEN_INTER);}
axiale { DrucEcho ( yytext );
return(DRUC_AXIALE);}
geodesique { DrucEcho ( yytext );
return(DRUC_GEODESIQUE);}
frontale { DrucEcho ( yytext );
return(DRUC_FRONTALE);}
laterale_min { DrucEcho ( yytext );
return(DRUC_LATERALE_MIN);}
laterale_max { DrucEcho ( yytext );
return(DRUC_LATERALE_MAX);}
longueur_min { DrucEcho ( yytext );
return(DRUC_LONGUEUR_MIN);}
longueur_max { DrucEcho ( yytext );
return(DRUC_LONGUEUR_MAX);}
largeur_min { DrucEcho ( yytext );
return(DRUC_LARGEUR_MIN);}
largeur_max { DrucEcho ( yytext );
return(DRUC_LARGEUR_MAX);}
superieure { DrucEcho ( yytext );
return(DRUC_SUP);}
inferieure { DrucEcho ( yytext );
return(DRUC_INF);}
surface { DrucEcho ( yytext );
return(DRUC_SURFACE);}
longueur { DrucEcho ( yytext );
return(DRUC_LONGUEUR);}
largeur { DrucEcho ( yytext );
return(DRUC_LARGEUR);}
notch { DrucEcho ( yytext );
return(DRUC_NOTCH);}
min { DrucEcho ( yytext );
return(DRUC_MIN);}
max { DrucEcho ( yytext );
return(DRUC_MAX);}
"<=" { DrucEcho ( yytext );
return(DRUC_INFEQ);}
">=" { DrucEcho ( yytext );
return(DRUC_SUPEQ);}
"->" { DrucEcho ( yytext );
return(DRUC_DESTINATION);}
{decimal} { DrucEcho ( yytext );
sscanf(yytext,"%d",&DrucInputEntier);
return(DRUC_ENTIER);
}
{reel} { DrucEcho ( yytext );
sscanf( yytext,"%f",& DrucInputFloat);
return(DRUC_FLOAT);
}
{negat} { DrucEcho ( yytext );
sscanf( yytext,"%f",& DrucInputFloat);
return(DRUC_NEG_FLOAT);
}
{ident} { DrucEcho ( yytext );
sscanf(yytext,"%s",DrucInputChaine);
return(DRUC_NOM);
}
{comment} { DrucEcho ( yytext );
}
. { DrucEcho ( yytext );
return (*yytext);}
{blanc} {
DrucEcho ( yytext );
}
layer {
DrucEcho ( yytext );
return DRUC_LAYER;
}
regle|rule {
DrucEcho ( yytext );
return DRUC_REGLE;
}
regles|rules {
DrucEcho ( yytext );
return DRUC_REGLES;
}
fin|end {
DrucEcho ( yytext );
return DRUC_FIN;
}
define {
DrucEcho ( yytext );
return DRUC_DEFINE;
}
undefine {
DrucEcho ( yytext );
return DRUC_UNDEFINE;
}
caracterise|characterize {
DrucEcho ( yytext );
return DRUC_CARACTERISE;
}
relation {
DrucEcho ( yytext );
return DRUC_RELATION;
}
resize {
DrucEcho ( yytext );
return DRUC_RESIZE;
}
exclusion {
DrucEcho ( yytext );
return DRUC_EXCLUSION;
}
union {
DrucEcho ( yytext );
return DRUC_UNION;
}
enveloppe|envelope {
DrucEcho ( yytext );
return DRUC_ENVELOPPE;
}
marge|margin {
DrucEcho ( yytext );
return DRUC_MARGE;
}
croix|cross {
DrucEcho ( yytext );
return DRUC_CROIX;
}
intersection {
DrucEcho ( yytext );
return DRUC_INTERSECT;
}
extension {
DrucEcho ( yytext );
return DRUC_EXTENSION;
}
inclusion {
DrucEcho ( yytext );
return DRUC_INCLUSION;
}
distance|spacing {
DrucEcho ( yytext );
return DRUC_DISTANCE;
}
surface_inter|intersection_area {
DrucEcho ( yytext );
return DRUC_SURFACE_INTER;
}
longueur_inter|intersection_length {
DrucEcho ( yytext );
return DRUC_LONG_INTER;
}
largeur_inter|intersection_width {
DrucEcho ( yytext );
return DRUC_LARGE_INTER;
}
penetre_inter|inclusion_intersection {
DrucEcho ( yytext );
return DRUC_PENET_INTER;
}
parallele_inter|parallel_intersection {
DrucEcho ( yytext );
return DRUC_PARAL_INTER;
}
perpendiculaire_inter|perpendicular_intersection {
DrucEcho ( yytext );
return DRUC_PERPEN_INTER;
}
axiale|axial {
DrucEcho ( yytext );
return DRUC_AXIALE;
}
geodesique|geodetic {
DrucEcho ( yytext );
return DRUC_GEODESIQUE;
}
frontale {
DrucEcho ( yytext );
return DRUC_FRONTALE;
}
laterale_min|min_sideways {
DrucEcho ( yytext );
return DRUC_LATERALE_MIN;
}
laterale_max|max_sideways {
DrucEcho ( yytext );
return DRUC_LATERALE_MAX;
}
longueur_min|min_length {
DrucEcho ( yytext );
return DRUC_LONGUEUR_MIN;
}
longueur_max|max_length {
DrucEcho ( yytext );
return DRUC_LONGUEUR_MAX;
}
largeur_min|min_width {
DrucEcho ( yytext );
return DRUC_LARGEUR_MIN;
}
largeur_max|max_width {
DrucEcho ( yytext );
return DRUC_LARGEUR_MAX;
}
superieure|superior {
DrucEcho ( yytext );
return DRUC_SUP;
}
inferieure|inferior {
DrucEcho ( yytext );
return DRUC_INF;
}
surface|area {
DrucEcho ( yytext );
return DRUC_SURFACE;
}
longueur|length {
DrucEcho ( yytext );
return DRUC_LONGUEUR;
}
largeur|width {
DrucEcho ( yytext );
return DRUC_LARGEUR;
}
notch {
DrucEcho ( yytext );
return DRUC_NOTCH;
}
min|">\:" {
DrucEcho ( yytext );
return DRUC_MIN;
}
max|"<\:" {
DrucEcho ( yytext );
return DRUC_MAX;
}
"<=" {
DrucEcho ( yytext );
return DRUC_INFEQ;
}
">=" {
DrucEcho ( yytext );
return DRUC_SUPEQ;
}
"->" {
DrucEcho ( yytext );
return DRUC_DESTINATION;
}
{decimal} {
DrucEcho ( yytext );
sscanf( yytext,"%d", &DrucInputEntier );
return DRUC_ENTIER;
}
{reel} {
DrucEcho ( yytext );
sscanf( yytext,"%f", &DrucInputFloat );
return DRUC_FLOAT;
}
{negat} {
DrucEcho ( yytext );
sscanf( yytext,"%f", &DrucInputFloat );
return DRUC_NEG_FLOAT;
}
{ident} {
DrucEcho ( yytext );
sscanf( yytext,"%s",DrucInputChaine );
return DRUC_NOM;
}
{comment} {
DrucEcho ( yytext );
}
. {
DrucEcho ( yytext );
return *yytext;
}
%%
void DrucEcho ( text )
int yywrap( void )
{
if ( DrucStructStat.FLAG_VIEW_RULE_MODE == DRUC_VERBOSE
)
{
DrucViewString ( text );
}
return 1;
}
int yywrap()
{ return(1) ; }

View File

@ -27,12 +27,13 @@
\------------------------------------------------------------*/
extern int yylineno;
extern FILE *yyin;
int DrucIndexMesure;
int DrucInputEntier;
int DrucNegatif;
float DrucInputFloat;
char DrucInputChaine[DRUC_MAX_STRING_BUFFER + 1];
extern int yylex ();
int DrucIndexMesure;
int DrucInputEntier;
int DrucNegatif;
float DrucInputFloat;
char DrucInputChaine[DRUC_MAX_STRING_BUFFER + 1];
%}
/*------------------------------------------------------------\
@ -40,6 +41,10 @@ extern int yylex ();
| Druc Types LEX/YACC |
| |
\------------------------------------------------------------*/
%union {
unsigned int uint;
}
/*------------------------------------------------------------\
| |
| Druc Terminaux |
@ -54,29 +59,25 @@ extern int yylex ();
DRUC_UNION DRUC_EXCLUSION DRUC_RESIZE
DRUC_ENVELOPPE DRUC_MARGE DRUC_CROIX
DRUC_INTERSECT DRUC_EXTENSION DRUC_INCLUSION
DRUC_DISTANCE
DRUC_SURFACE_INTER DRUC_LONG_INTER DRUC_LARGE_INTER
DRUC_PENET_INTER DRUC_PARAL_INTER DRUC_PERPEN_INTER
DRUC_FRONTALE DRUC_LATERALE_MIN DRUC_LATERALE_MAX
DRUC_LARGEUR_MIN DRUC_LARGEUR_MAX
DRUC_LONGUEUR_MIN DRUC_LONGUEUR_MAX
DRUC_SUP DRUC_INF
DRUC_AXIALE DRUC_GEODESIQUE
DRUC_SURFACE DRUC_LONGUEUR DRUC_LARGEUR
DRUC_MIN DRUC_MAX
DRUC_INFEQ DRUC_SUPEQ
DRUC_DIFF DRUC_NOTCH
DRUC_DESTINATION
DRUC_ENTIER DRUC_FLOAT DRUC_NEG_FLOAT
%type <uint> config
%token <uint> DRUC_DISTANCE DRUC_INTERSECT DRUC_EXTENSION
DRUC_INCLUSION DRUC_ENVELOPPE DRUC_MARGE DRUC_CROIX
%type <uint> mesure_rel
%token <uint> DRUC_SURFACE_INTER DRUC_LONG_INTER DRUC_LARGE_INTER
DRUC_PENET_INTER DRUC_PARAL_INTER DRUC_PERPEN_INTER
DRUC_LONGUEUR_MIN DRUC_LONGUEUR_MAX DRUC_LARGEUR_MIN
DRUC_LARGEUR_MAX DRUC_FRONTALE DRUC_LATERALE_MIN
DRUC_LATERALE_MAX DRUC_SUP DRUC_INF DRUC_AXIALE
DRUC_GEODESIQUE
%type <uint> mesure
%token <uint> DRUC_SURFACE DRUC_LONGUEUR DRUC_LARGEUR DRUC_NOTCH
%type <uint> compar
%token <uint> DRUC_MIN DRUC_MAX DRUC_INFEQ DRUC_SUPEQ '<' '>'
'=' DRUC_DIFF
/*------------------------------------------------------------\
| |
| Druc Racine |
@ -93,11 +94,11 @@ extern int yylex ();
drc : { DrucNombreInstructions = 0;
DrucInitCompiler () ;}
list_layer
list_layer
DRUC_REGLES
list_bloc
DRUC_FIN
DRUC_REGLES { return 0;}
DRUC_REGLES { return 0;}
;
list_layer: list_layer layer
@ -105,66 +106,66 @@ list_layer: list_layer layer
;
layer : DRUC_LAYER
DRUC_NOM { DrucInitRdsLayerName ( DrucInputChaine ) ;}
DRUC_FLOAT { DrucInitRdsLayerDef ( RprTranslateParam ( DrucInputFloat ) );}
DRUC_NOM { DrucInitRdsLayerName ( DrucInputChaine ) ;}
DRUC_FLOAT { DrucInitRdsLayerDef ( RprTranslateParam ( DrucInputFloat ) );}
';'
;
list_bloc : list_bloc
bloc
| bloc
| bloc
;
bloc : define { DrucLoadInstructionDefine () ;}
| undefine { DrucLoadInstructionUndefine () ;}
| undefine { DrucLoadInstructionUndefine () ;}
| caracter { DrucLoadInstructionRegle () ;}
| relation { DrucLoadInstructionRegle () ;}
;
define : DRUC_DEFINE
DRUC_NOM { DrucInitDefineLayerA ( DrucInputChaine ) ;}
DRUC_NOM { DrucInitDefineLayerA ( DrucInputChaine ) ;}
','
resiz
resiz
DRUC_DESTINATION
DRUC_NOM { DrucInitDefineLayerDest ( DrucInputChaine ) ;}
';'
;
DRUC_NOM { DrucInitDefineLayerDest ( DrucInputChaine ) ;}
';'
;
resiz : valresiz
defmodif
defoper
| DRUC_NOM { DrucInitDefineLayerB ( DrucInputChaine ) ;}
| DRUC_NOM { DrucInitDefineLayerB ( DrucInputChaine ) ;}
compose
;
valresiz : DRUC_FLOAT { DrucInitDefineValeur ( RprTranslateParam ( DrucInputFloat)) ;}
| DRUC_NEG_FLOAT { long i ;
i = RprTranslateParam ( DrucInputFloat );
valresiz : DRUC_FLOAT { DrucInitDefineValeur ( RprTranslateParam ( DrucInputFloat)) ;}
| DRUC_NEG_FLOAT { long i ;
i = RprTranslateParam ( DrucInputFloat );
DrucInitDefineValeur ( i );}
;
defoper : ',' { DrucInitOpUnaire ( ) ;}
DRUC_NOM { DrucInitDefineLayerB ( DrucInputChaine ) ;}
DRUC_NOM { DrucInitDefineLayerB ( DrucInputChaine ) ;}
compose
|
|
;
compose : DRUC_UNION { DrucStructDefineOpCompose( DRUC_COMPOSE_UNION );}
| DRUC_INTERSECT { DrucStructDefineOpCompose( DRUC_COMPOSE_INTERSECT );}
| DRUC_EXCLUSION { DrucStructDefineOpCompose( DRUC_COMPOSE_EXCLUSION );}
| DRUC_INCLUSION { DrucStructDefineOpCompose( DRUC_COMPOSE_INCLUSION );}
| DRUC_INTERSECT { DrucStructDefineOpCompose( DRUC_COMPOSE_INTERSECT );}
| DRUC_EXCLUSION { DrucStructDefineOpCompose( DRUC_COMPOSE_EXCLUSION );}
| DRUC_INCLUSION { DrucStructDefineOpCompose( DRUC_COMPOSE_INCLUSION );}
;
defmodif : DRUC_RESIZE { DrucStructDefineOpCompose( DRUC_COMPOSE_RESIZE );}
;
undefine : DRUC_UNDEFINE
DRUC_NOM { DrucInitUndefineUserLayer ( DrucInputChaine ) ;}
DRUC_NOM { DrucInitUndefineUserLayer ( DrucInputChaine ) ;}
';'
;
caracter : DRUC_CARACTERISE
DRUC_NOM { DrucInitRegleLayerA ( DrucInputChaine ) ;
DRUC_NOM { DrucInitRegleLayerA ( DrucInputChaine ) ;
DrucInitRegleInstruction ( DRUC_INSTR_CARACTERISE ) ;
DrucIndexMesure = -1 ;}
'('
@ -179,20 +180,22 @@ lst_rgl_1 : lst_rgl_1
;
regle_1 : DRUC_REGLE { DrucIndexMesure ++ ;}
DRUC_ENTIER { DrucInitRegleNumero ( DrucInputEntier,
DRUC_ENTIER { DrucInitRegleNumero ( DrucInputEntier,
DrucIndexMesure) ;}
':'
mesure
compar
DRUC_FLOAT { DrucInitRegleValeur ( RprTranslateParam ( DrucInputFloat ),
mesure { DrucInitRegleMesure( $6,
DrucIndexMesure );}
compar { DrucInitRegleOpCompare ( $8,
DrucIndexMesure );}
DRUC_FLOAT { DrucInitRegleValeur ( RprTranslateParam ( DrucInputFloat ),
DrucIndexMesure );}
';'
;
relation : DRUC_RELATION { DrucInitRegleInstruction ( DRUC_INSTR_RELATION ) ;}
DRUC_NOM { DrucInitRegleLayerA ( DrucInputChaine ) ;}
DRUC_NOM { DrucInitRegleLayerA ( DrucInputChaine ) ;}
','
DRUC_NOM { DrucInitRegleLayerB ( DrucInputChaine ) ;
DRUC_NOM { DrucInitRegleLayerB ( DrucInputChaine ) ;
DrucIndexMesure = -1 ; }
'('
lst_rgl_2
@ -205,103 +208,66 @@ lst_rgl_2 : lst_rgl_2
| regle_2
;
regle_2 : DRUC_REGLE { DrucIndexMesure ++ ;}
DRUC_ENTIER { DrucInitRegleNumero ( DrucInputEntier,
DrucIndexMesure ) ;}
regle_2 : DRUC_REGLE { DrucIndexMesure++ ;}
DRUC_ENTIER { DrucInitRegleNumero ( DrucInputEntier,
DrucIndexMesure ) ;}
':'
config
mesure_rel
compar
DRUC_FLOAT { DrucInitRegleValeur ( RprTranslateParam ( DrucInputFloat ),
DrucIndexMesure );}
config { DrucInitRegleRelation( $6,
DrucIndexMesure );}
mesure_rel { DrucInitRegleMesure( $8,
DrucIndexMesure );}
compar { DrucInitRegleOpCompare ( $10,
DrucIndexMesure );}
DRUC_FLOAT { DrucInitRegleValeur ( RprTranslateParam ( DrucInputFloat ),
DrucIndexMesure );}
';'
;
config : DRUC_DISTANCE { DrucInitRegleRelation( DRUC_RELATION_DISTANCE,
DrucIndexMesure );}
| DRUC_INTERSECT { DrucInitRegleRelation( DRUC_RELATION_INTERSECTION,
DrucIndexMesure );}
| DRUC_EXTENSION { DrucInitRegleRelation( DRUC_RELATION_EXTENSION,
DrucIndexMesure );}
| DRUC_INCLUSION { DrucInitRegleRelation( DRUC_RELATION_INCLUSION,
DrucIndexMesure );}
| DRUC_ENVELOPPE { DrucInitRegleRelation( DRUC_RELATION_ENVELOPPE,
DrucIndexMesure );}
| DRUC_MARGE { DrucInitRegleRelation( DRUC_RELATION_MARGE,
DrucIndexMesure );}
| DRUC_CROIX { DrucInitRegleRelation( DRUC_RELATION_CROIX,
DrucIndexMesure );}
config : DRUC_DISTANCE { $$ = DRUC_RELATION_DISTANCE;}
| DRUC_INTERSECT { $$ = DRUC_RELATION_INTERSECTION;}
| DRUC_EXTENSION { $$ = DRUC_RELATION_EXTENSION;}
| DRUC_INCLUSION { $$ = DRUC_RELATION_INCLUSION;}
| DRUC_ENVELOPPE { $$ = DRUC_RELATION_ENVELOPPE;}
| DRUC_MARGE { $$ = DRUC_RELATION_MARGE;}
| DRUC_CROIX { $$ = DRUC_RELATION_CROIX;}
;
mesure_rel: DRUC_SURFACE_INTER{ DrucInitRegleMesure( DRUC_MESURE_SURFACE_INTER,
DrucIndexMesure );}
| DRUC_LONG_INTER { DrucInitRegleMesure( DRUC_MESURE_LONGUEUR_INTER,
DrucIndexMesure );}
| DRUC_LARGE_INTER { DrucInitRegleMesure( DRUC_MESURE_LARGEUR_INTER,
DrucIndexMesure );}
| DRUC_PENET_INTER { DrucInitRegleMesure( DRUC_MESURE_PENETRE_INTER,
DrucIndexMesure );}
| DRUC_PARAL_INTER { DrucInitRegleMesure( DRUC_MESURE_PARALEL_INTER,
DrucIndexMesure );}
| DRUC_PERPEN_INTER{ DrucInitRegleMesure( DRUC_MESURE_PERPEND_INTER,
DrucIndexMesure );}
| DRUC_LONGUEUR_MIN{ DrucInitRegleMesure( DRUC_MESURE_LONGUEUR_MIN,
DrucIndexMesure );}
| DRUC_LONGUEUR_MAX{ DrucInitRegleMesure( DRUC_MESURE_LONGUEUR_MAX,
DrucIndexMesure );}
| DRUC_LARGEUR_MIN { DrucInitRegleMesure( DRUC_MESURE_LARGEUR_MIN,
DrucIndexMesure );}
| DRUC_LARGEUR_MAX { DrucInitRegleMesure( DRUC_MESURE_LARGEUR_MAX,
DrucIndexMesure );}
| DRUC_FRONTALE { DrucInitRegleMesure( DRUC_MESURE_FRONTALE,
DrucIndexMesure );}
| DRUC_LATERALE_MIN{ DrucInitRegleMesure( DRUC_MESURE_LATERALE_MIN,
DrucIndexMesure );}
| DRUC_LATERALE_MAX{ DrucInitRegleMesure( DRUC_MESURE_LATERALE_MAX,
DrucIndexMesure );}
| DRUC_SUP { DrucInitRegleMesure( DRUC_MESURE_SUP,
DrucIndexMesure );}
| DRUC_INF { DrucInitRegleMesure( DRUC_MESURE_INF,
DrucIndexMesure );}
| DRUC_AXIALE { DrucInitRegleMesure( DRUC_MESURE_AXIALE,
DrucIndexMesure );}
| DRUC_GEODESIQUE { DrucInitRegleMesure( DRUC_MESURE_GEODESIQUE,
DrucIndexMesure );}
mesure_rel: DRUC_SURFACE_INTER { $$ = DRUC_MESURE_SURFACE_INTER;}
| DRUC_LONG_INTER { $$ = DRUC_MESURE_LONGUEUR_INTER;}
| DRUC_LARGE_INTER { $$ = DRUC_MESURE_LARGEUR_INTER;}
| DRUC_PENET_INTER { $$ = DRUC_MESURE_PENETRE_INTER;}
| DRUC_PARAL_INTER { $$ = DRUC_MESURE_PARALEL_INTER;}
| DRUC_PERPEN_INTER { $$ = DRUC_MESURE_PERPEND_INTER;}
| DRUC_LONGUEUR_MIN { $$ = DRUC_MESURE_LONGUEUR_MIN;}
| DRUC_LONGUEUR_MAX { $$ = DRUC_MESURE_LONGUEUR_MAX;}
| DRUC_LARGEUR_MIN { $$ = DRUC_MESURE_LARGEUR_MIN;}
| DRUC_LARGEUR_MAX { $$ = DRUC_MESURE_LARGEUR_MAX;}
| DRUC_FRONTALE { $$ = DRUC_MESURE_FRONTALE;}
| DRUC_LATERALE_MIN { $$ = DRUC_MESURE_LATERALE_MIN;}
| DRUC_LATERALE_MAX { $$ = DRUC_MESURE_LATERALE_MAX;}
| DRUC_SUP { $$ = DRUC_MESURE_SUP;}
| DRUC_INF { $$ = DRUC_MESURE_INF;}
| DRUC_AXIALE { $$ = DRUC_MESURE_AXIALE;}
| DRUC_GEODESIQUE { $$ = DRUC_MESURE_GEODESIQUE;}
;
mesure : DRUC_SURFACE { DrucInitRegleMesure( DRUC_MESURE_SURFACE,
DrucIndexMesure );}
| DRUC_LONGUEUR { DrucInitRegleMesure( DRUC_MESURE_LONGUEUR,
DrucIndexMesure );}
| DRUC_LARGEUR { DrucInitRegleMesure( DRUC_MESURE_LARGEUR,
DrucIndexMesure );}
| DRUC_NOTCH { DrucInitRegleMesure( DRUC_MESURE_NOTCH,
DrucIndexMesure );}
| DRUC_SURFACE_INTER { DrucInitRegleMesure( DRUC_MESURE_SURFACE_INTER,
DrucIndexMesure );}
| DRUC_LONG_INTER { DrucInitRegleMesure( DRUC_MESURE_LONGUEUR_INTER,
DrucIndexMesure );}
| DRUC_LARGE_INTER { DrucInitRegleMesure( DRUC_MESURE_LARGEUR_INTER,
DrucIndexMesure );}
mesure : DRUC_SURFACE { $$ = DRUC_MESURE_SURFACE;}
| DRUC_LONGUEUR { $$ = DRUC_MESURE_LONGUEUR;}
| DRUC_LARGEUR { $$ = DRUC_MESURE_LARGEUR;}
| DRUC_NOTCH { $$ = DRUC_MESURE_NOTCH;}
| DRUC_SURFACE_INTER { $$ = DRUC_MESURE_SURFACE_INTER;}
| DRUC_LONG_INTER { $$ = DRUC_MESURE_LONGUEUR_INTER;}
| DRUC_LARGE_INTER { $$ = DRUC_MESURE_LARGEUR_INTER;}
;
compar : DRUC_MIN { DrucInitRegleOpCompare ( DRUC_OPERATION_MIN,
DrucIndexMesure );}
| DRUC_MAX { DrucInitRegleOpCompare ( DRUC_OPERATION_MAX,
DrucIndexMesure );}
| DRUC_INFEQ { DrucInitRegleOpCompare ( DRUC_OPERATION_INFEQ,
DrucIndexMesure );}
| DRUC_SUPEQ { DrucInitRegleOpCompare ( DRUC_OPERATION_SUPEQ,
DrucIndexMesure );}
| '<' { DrucInitRegleOpCompare ( DRUC_OPERATION_INF,
DrucIndexMesure );}
| '>' { DrucInitRegleOpCompare ( DRUC_OPERATION_SUP,
DrucIndexMesure );}
| '=' { DrucInitRegleOpCompare ( DRUC_OPERATION_EQUAL,
DrucIndexMesure );}
| DRUC_DIFF { DrucInitRegleOpCompare ( DRUC_OPERATION_DIFF,
DrucIndexMesure );}
compar : DRUC_MIN { $$ = DRUC_OPERATION_MIN;}
| DRUC_MAX { $$ = DRUC_OPERATION_MAX;}
| DRUC_INFEQ { $$ = DRUC_OPERATION_INFEQ;}
| DRUC_SUPEQ { $$ = DRUC_OPERATION_SUPEQ;}
| '<' { $$ = DRUC_OPERATION_INF;}
| '>' { $$ = DRUC_OPERATION_SUP;}
| '=' { $$ = DRUC_OPERATION_EQUAL;}
| DRUC_DIFF { $$ = DRUC_OPERATION_DIFF;}
;
%%

View File

@ -89,9 +89,9 @@ void DrucViewString ( String
if ( DrucStructStat.FLAG_VERBOSE_MODE == DRUC_VERBOSE
)
{
fprintf ( stdout,
"%s",
String
fprintf ( stdout,
"%s",
String
);
fflush ( stdout
);
@ -113,9 +113,9 @@ void DrucViewNumber ( Number
if ( DrucStructStat.FLAG_VERBOSE_MODE == DRUC_VERBOSE
)
{
fprintf ( stdout,
"%3ld",
Number
fprintf ( stdout,
"%3ld",
Number
);
}
}
@ -127,7 +127,7 @@ void DrucViewNumber ( Number
| Calcule et met a jour le checksumm des instructions |
| assembleur ecrites dans le fichier DRUC_OUTPUT_NAME; |
void DrucComputeCheckSumm ( Value
void DrucComputeCheckSumm ( Value
)
int Value;
@ -148,7 +148,7 @@ unsigned int TmpCheckSumm;
| |
\------------------------------------------------------------*/
char *DrucGetRuleComment ( Rule
char *DrucGetRuleComment ( Rule
)
long Rule;
@ -158,13 +158,13 @@ DrucTypeStructRuleComment *Scan;
for ( Scan = DrucRuleCommentList;
Scan != (DrucTypeStructRuleComment *)NULL;
Scan = Scan->NEXT
Scan = Scan->NEXT
)
{
if ( Scan->RULE == Rule
if ( Scan->RULE == Rule
)
{
return ( Scan->COMMENT
return ( Scan->COMMENT
);
}
}
@ -187,7 +187,7 @@ DrucTypeStructRuleComment *Scan;
for ( Scan = DrucRuleCommentList;
Scan != (DrucTypeStructRuleComment *)NULL;
Scan = Scan->NEXT
Scan = Scan->NEXT
)
{
DrucViewNumber ( Scan->RULE
@ -217,7 +217,8 @@ void DrucStatInit ( Flatten,
FileType
)
boolean Flatten;
boolean Verbose;
boolean Verbose;
boolean View_Rules;
boolean FileType;
{

View File

@ -1,7 +1,7 @@
etcdir=$(prefix)/etc
etc_DATA=cmos.rds scn6m_deep_09.rds
etc_DATA=symbolic.rds cmos.rds scn6m_deep_09.rds
EXTRA_DIST=$(etc_DATA)

View File

@ -0,0 +1,942 @@
#=====================================================================
#
# ALLIANCE VLSI CAD
# (R)eal (D)ata (S)tructure parameter file
# (c) copyright 1992 Laboratory UPMC/MASI/CAO-VLSI
# all rights reserved
# e-mail : cao-vlsi@masi.ibp.fr
#
# file : symbolic.rds, derived from cmos.rds
# version : 12
# last modif : Mar 19, 2019
#
##-------------------------------------------------------------------
# Symbolic to micron on a 'one lambda equals one micron' basis
##-------------------------------------------------------------------
# Refer to the documentation for more precise information.
#=====================================================================
# 01/11/09 ALU5/6 pitch 10
#
# 99/11/3 ALU5/6 rules
# . theses rules are preliminary rules, we hope that they wil change
# in future. For now, ALU5/6 are dedicated to supplies an clock.
#
# 99/3/22 new symbolics rules
# . ALU1 width remains 1, ALU2/3/4 is 2
# . ALU1/2/3/4 spacing (edge to edge) is now 3 for all
# . GATE to GATE spacing is 3 but POLY wire to POLY wire remains 2
# . All via stacking are allowed
#
# 98/12/1 drc rules were updated
# spacing VIA to POLY or gate is one rather 2
# VIA2 and ALU3 appeared
# . ALU3 width is 3
# . ALU2/VIA2/ALU3 is resp. 3/1/3
# . ALU3 edge spacing is 2
# . stacked VIA/VIA2 is allowed
# . if they are not stacked they must distant of 2
# . CONT/VIA2 is free
# note
# . stacked CONT/VIA is always not allowed
# NWELL is automatically drawn with the DIFN and NTIE layers
#=====================================================================
##-------------------------------------------------------------------
# PHYSICAL_GRID :
##-------------------------------------------------------------------
DEFINE PHYSICAL_GRID .5
##-------------------------------------------------------------------
# LAMBDA :
##-------------------------------------------------------------------
DEFINE LAMBDA 1
##-------------------------------------------------------------------
# TABLE MBK_TO_RDS_SEGMENT :
#
# MBK RDS layer 1 RDS layer 2
# name name TRANS DLR DWR OFFSET name TRANS DLR DWR OFFSET ...
##-------------------------------------------------------------------
TABLE MBK_TO_RDS_SEGMENT
PWELL RDS_PWELL VW 0.0 0.0 0.0 EXT
NWELL RDS_NWELL VW 0.0 0.0 0.0 ALL
NDIF RDS_NDIF VW 0.5 0.0 0.0 ALL
PDIF RDS_PDIF VW 0.5 0.0 0.0 ALL \
RDS_NWELL VW 1.0 1.0 0.0 ALL
NTIE RDS_NTIE VW 0.5 0.0 0.0 ALL \
RDS_NWELL VW 1.0 1.0 0.0 ALL
PTIE RDS_PTIE VW 0.5 0.0 0.0 ALL
NTRANS RDS_POLY VW 0.0 0.0 0.0 ALL \
RDS_NDIF LCW -1.5 2.0 0.0 EXT \
RDS_NDIF RCW -1.5 2.0 0.0 EXT \
RDS_NDIF VW -1.5 4.0 0.0 DRC \
RDS_ACTIV VW -1.5 5.0 0.0 ALL \
RDS_PWELL VW -1.5 0.0 0.0 EXT
PTRANS RDS_POLY VW 0.0 0.0 0.0 ALL \
RDS_PDIF LCW -1.5 2.0 0.0 EXT \
RDS_PDIF RCW -1.5 2.0 0.0 EXT \
RDS_PDIF VW -1.5 4.0 0.0 DRC \
RDS_ACTIV VW -1.5 5.0 0.0 ALL \
RDS_NWELL VW -1.0 5.0 0.0 ALL
POLY RDS_POLY VW 0.5 0.0 0.0 ALL
POLY2 RDS_POLY2 VW 0.5 0.0 0.0 ALL
ALU1 RDS_ALU1 VW 0.5 0.0 0.0 ALL
ALU2 RDS_ALU2 VW 1.0 0.0 0.0 ALL
ALU3 RDS_ALU3 VW 1.0 0.0 0.0 ALL
ALU4 RDS_ALU4 VW 1.0 0.0 0.0 ALL
ALU5 RDS_ALU5 VW 1.0 0.0 0.0 ALL
ALU6 RDS_ALU6 VW 1.0 0.0 0.0 ALL
CALU1 RDS_ALU1 VW 1.0 0.0 0.0 ALL
CALU2 RDS_ALU2 VW 1.0 0.0 0.0 ALL
CALU3 RDS_ALU3 VW 1.0 0.0 0.0 ALL
CALU4 RDS_ALU4 VW 1.0 0.0 0.0 ALL
CALU5 RDS_ALU5 VW 1.0 0.0 0.0 ALL
CALU6 RDS_ALU6 VW 1.0 0.0 0.0 ALL
TPOLY RDS_TPOLY VW 0.5 0.0 0.0 ALL
TALU1 RDS_TALU1 VW 0.5 0.0 0.0 ALL
TALU2 RDS_TALU2 VW 1.0 0.0 0.0 ALL
TALU3 RDS_TALU3 VW 1.0 0.0 0.0 ALL
TALU4 RDS_TALU4 VW 1.0 0.0 0.0 ALL
TALU5 RDS_TALU5 VW 1.0 0.0 0.0 ALL
TALU6 RDS_TALU6 VW 1.0 0.0 0.0 ALL
END
##-------------------------------------------------------------------
# TABLE MBK_TO_RDS_CONNECTOR :
#
# MBK RDS layer
# name name DER DWR
##-------------------------------------------------------------------
TABLE MBK_TO_RDS_CONNECTOR
POLY RDS_POLY .5 0
POLY2 RDS_POLY2 .5 0
ALU1 RDS_ALU1 .5 0
ALU2 RDS_ALU2 1.0 0
ALU3 RDS_ALU3 1.0 0
ALU4 RDS_ALU4 1.0 0
ALU5 RDS_ALU5 1.0 0
ALU6 RDS_ALU6 1.0 0
END
##-------------------------------------------------------------------
# TABLE MBK_TO_RDS_REFERENCE :
#
# MBK ref RDS layer
# name name width
##-------------------------------------------------------------------
TABLE MBK_TO_RDS_REFERENCE
REF_REF RDS_REF 1
REF_CON RDS_VALU1 2 RDS_TVIA1 1 RDS_TALU2 2
END
##-------------------------------------------------------------------
# TABLE MBK_TO_RDS_VIA1 :
#
# MBK via RDS layer 1 RDS layer 2 RDS layer 3 RDS layer 4
# name name width name width name width name width
##-------------------------------------------------------------------
TABLE MBK_TO_RDS_VIA
CONT_BODY_P RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_PTIE 3 ALL
CONT_BODY_N RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_NTIE 3 ALL RDS_NWELL 4 ALL
CONT_DIF_N RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_NDIF 3 ALL
CONT_DIF_P RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_PDIF 3 ALL RDS_NWELL 4 ALL
CONT_POLY RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_POLY 3 ALL
CONT_POLY2 RDS_ALU1 2 ALL RDS_CONT 1 ALL RDS_POLY2 3 ALL
CONT_VIA RDS_ALU1 2 ALL RDS_VIA1 1 ALL RDS_ALU2 2 ALL
CONT_VIA2 RDS_ALU2 2 ALL RDS_VIA2 1 ALL RDS_ALU3 2 ALL
CONT_VIA3 RDS_ALU3 2 ALL RDS_VIA3 1 ALL RDS_ALU4 2 ALL
CONT_VIA4 RDS_ALU4 2 ALL RDS_VIA4 1 ALL RDS_ALU5 2 ALL
CONT_VIA5 RDS_ALU5 2 ALL RDS_VIA5 1 ALL RDS_ALU6 2 ALL
C_X_N RDS_POLY 1 ALL RDS_NDIF 5 ALL RDS_ACTIV 6 ALL
C_X_P RDS_POLY 1 ALL RDS_PDIF 5 ALL RDS_NWELL 6 ALL RDS_ACTIV 6 ALL
END
##-------------------------------------------------------------------
# TABLE MBK_TO_RDS_BIGVIA_HOLE :
#
# MBK via RDS Hole
# name name side step mode
##-------------------------------------------------------------------
TABLE MBK_TO_RDS_BIGVIA_HOLE
CONT_VIA RDS_VIA1 1 4 ALL
CONT_VIA2 RDS_VIA2 1 4 ALL
CONT_VIA3 RDS_VIA3 1 4 ALL
CONT_VIA4 RDS_VIA4 1 4 ALL # should be more than 4
CONT_VIA5 RDS_VIA5 1 4 ALL # should be more than 4
END
##-------------------------------------------------------------------
# TABLE MBK_TO_RDS_BIGVIA_METAL :
#
# MBK via RDS layer 1 ...
# name name delta-width overlap mode
##-------------------------------------------------------------------
TABLE MBK_TO_RDS_BIGVIA_METAL
CONT_VIA RDS_ALU1 0.0 0.5 ALL RDS_ALU2 0.0 0.5 ALL
CONT_VIA2 RDS_ALU2 0.0 0.5 ALL RDS_ALU3 0.0 0.5 ALL
CONT_VIA3 RDS_ALU3 0.0 0.5 ALL RDS_ALU4 0.0 0.5 ALL
CONT_VIA4 RDS_ALU4 0.0 0.5 ALL RDS_ALU5 0.0 0.5 ALL
CONT_VIA5 RDS_ALU5 0.0 0.5 ALL RDS_ALU6 0.0 0.5 ALL
END
##-------------------------------------------------------------------
# TABLE MBK_TO_RDS_TURNVIA :
#
# MBK via RDS layer 1 ...
# name name DWR MODE
##-------------------------------------------------------------------
TABLE MBK_TO_RDS_TURNVIA
CONT_TURN1 RDS_ALU1 0 ALL
CONT_TURN2 RDS_ALU2 0 ALL
CONT_TURN3 RDS_ALU3 0 ALL
CONT_TURN4 RDS_ALU4 0 ALL
CONT_TURN5 RDS_ALU5 0 ALL
CONT_TURN6 RDS_ALU6 0 ALL
END
##-------------------------------------------------------------------
# TABLE LYNX_GRAPH :
#
# RDS layer Rds layer 1 Rds layer 2 ...
# name name name ...
##-------------------------------------------------------------------
TABLE LYNX_GRAPH
##---------------------------
#
# Modifie par L.Jacomme (Pb Bulk/Alim avec Lynx)
# 23.11.99
#
# RDS_NWELL RDS_NTIE RDS_NWELL
# RDS_PWELL RDS_PTIE RDS_PWELL
# RDS_NDIF RDS_CONT RDS_NDIF
# RDS_PDIF RDS_CONT RDS_PDIF
# RDS_NTIE RDS_CONT RDS_NTIE RDS_NWELL
# RDS_PTIE RDS_CONT RDS_PTIE RDS_PWELL
RDS_NDIF RDS_CONT RDS_NDIF
RDS_PDIF RDS_CONT RDS_PDIF
RDS_NTIE RDS_CONT RDS_NTIE
RDS_PTIE RDS_CONT RDS_PTIE
RDS_POLY RDS_CONT RDS_POLY
RDS_POLY2 RDS_CONT RDS_POLY2
RDS_CONT RDS_PDIF RDS_NDIF RDS_POLY RDS_PTIE RDS_NTIE RDS_ALU1 RDS_CONT
RDS_ALU1 RDS_CONT RDS_VIA1 RDS_ALU1 RDS_VALU1 RDS_ALU1
RDS_VALU1 RDS_CONT RDS_VIA1 RDS_ALU1 RDS_VALU1
RDS_VIA1 RDS_ALU1 RDS_ALU2 RDS_VIA1
RDS_VIA2 RDS_ALU2 RDS_ALU3 RDS_VIA2
RDS_VIA3 RDS_ALU3 RDS_ALU4 RDS_VIA3
RDS_VIA4 RDS_ALU4 RDS_ALU5 RDS_VIA4
RDS_VIA5 RDS_ALU5 RDS_ALU6 RDS_VIA5
RDS_ALU2 RDS_VIA1 RDS_VIA2 RDS_ALU2
RDS_ALU3 RDS_VIA2 RDS_VIA3 RDS_ALU3
RDS_ALU4 RDS_VIA3 RDS_VIA4 RDS_ALU4
RDS_ALU5 RDS_VIA4 RDS_VIA5 RDS_ALU5
RDS_ALU6 RDS_VIA5 RDS_ALU6
END
##-------------------------------------------------------------------
# TABLE LYNX_CAPA :
#
# RDS layer Surface capacitance Perimetric capacitance
# name piF / Micron^2 piF / Micron
##-------------------------------------------------------------------
TABLE LYNX_CAPA
RDS_POLY 1.00e-04 1.00e-04
RDS_POLY2 1.00e-04 1.00e-04
RDS_ALU1 0.50e-04 0.90e-04
RDS_ALU2 0.25e-04 0.95e-04
RDS_ALU3 0.25e-04 0.95e-04
RDS_ALU4 0.25e-04 0.95e-04
RDS_ALU5 0.25e-04 0.95e-04
RDS_ALU6 0.25e-04 0.95e-04
END
##-------------------------------------------------------------------
# TABLE LYNX_RESISTOR :
#
# RDS layer Surface resistor
# name Ohm / Micron^2
##-------------------------------------------------------------------
TABLE LYNX_RESISTOR
RDS_POLY 50.0
RDS_POLY2 50.0
RDS_ALU1 0.1
RDS_ALU2 0.05
RDS_ALU3 0.05
RDS_ALU4 0.05
RDS_ALU5 0.05
RDS_ALU6 0.05
END
##-------------------------------------------------------------------
# TABLE LYNX_TRANSISTOR :
#
# MBK layer Transistor Type MBK via
# name name name
##-------------------------------------------------------------------
TABLE LYNX_TRANSISTOR
NTRANS NTRANS C_X_N RDS_POLY RDS_NDIF RDS_NDIF RDS_PWELL
PTRANS PTRANS C_X_P RDS_POLY RDS_PDIF RDS_PDIF RDS_NWELL
END
##-------------------------------------------------------------------
# TABLE LYNX_DIFFUSION :
#
# RDS layer RDS layer
# name name
##-------------------------------------------------------------------
TABLE LYNX_DIFFUSION
END
##-------------------------------------------------------------------
# TABLE LYNX_BULK_IMPLICIT :
#
# RDS layer Bulk type
# name EXPLICIT/IMPLICIT
##-------------------------------------------------------------------
TABLE LYNX_BULK_IMPLICIT
##---------------------------
#
# Modifie par L.Jacomme (Pb Bulk/Alim avec Lynx)
# 23.11.99
#
# NWELL EXPLICIT
# PWELL IMPLICIT
END
##-------------------------------------------------------------------
# TABLE S2R_OVERSIZE_DENOTCH :
##-------------------------------------------------------------------
TABLE S2R_OVERSIZE_DENOTCH
END
##-------------------------------------------------------------------
# TABLE S2R_BLOC_RING_WIDTH :
##-------------------------------------------------------------------
TABLE S2R_BLOC_RING_WIDTH
END
##-------------------------------------------------------------------
# TABLE S2R_MINIMUM_LAYER_WIDTH :
##-------------------------------------------------------------------
TABLE S2R_MINIMUM_LAYER_WIDTH
RDS_NWELL 4
RDS_PDIF 2
RDS_NTIE 2
RDS_PTIE 2
RDS_POLY 1
RDS_POLY2 1
RDS_TPOLY 1
RDS_CONT 1
RDS_ALU1 1
RDS_TALU1 1
RDS_VIA1 1
RDS_ALU2 2
RDS_TALU2 2
RDS_VIA2 1
RDS_ALU3 2
RDS_TALU3 2
RDS_VIA3 1
RDS_ALU4 2
RDS_TALU4 2
RDS_VIA4 1
RDS_ALU5 2
RDS_TALU5 2
RDS_VIA5 1
RDS_ALU6 2
RDS_TALU6 2
END
##-------------------------------------------------------------------
# TABLE MBK_WIRESETTING :
##-------------------------------------------------------------------
#
# This table is used by ocp, nero & ring. It supplies *symbolic*
# information about the routing grid, the cell gauge and the power
# wires.
TABLE MBK_WIRESETTING
X_GRID 5
Y_GRID 5
Y_SLICE 50
WIDTH_VDD 6
WIDTH_VSS 6
TRACK_WIDTH_ALU8 0
TRACK_WIDTH_ALU7 2
TRACK_WIDTH_ALU6 2
TRACK_WIDTH_ALU5 2
TRACK_WIDTH_ALU4 2
TRACK_WIDTH_ALU3 2
TRACK_WIDTH_ALU2 2
TRACK_WIDTH_ALU1 2
TRACK_SPACING_ALU8 0
TRACK_SPACING_ALU7 8
TRACK_SPACING_ALU6 8
TRACK_SPACING_ALU5 3
TRACK_SPACING_ALU4 3
TRACK_SPACING_ALU3 3
TRACK_SPACING_ALU2 3
TRACK_SPACING_ALU1 3
END
##-------------------------------------------------------------------
# TABLE CIF_LAYER :
##-------------------------------------------------------------------
TABLE CIF_LAYER
RDS_NWELL LNWELL
RDS_NDIF LNDIF
RDS_PDIF LPDIF
RDS_NTIE LNTIE
RDS_PTIE LPTIE
RDS_POLY LPOLY
RDS_POLY2 LPOLY2
RDS_TPOLY LTPOLY
RDS_CONT LCONT
RDS_ALU1 LALU1
RDS_VALU1 LVALU1
RDS_TALU1 LTALU1
RDS_VIA1 LVIA
RDS_TVIA1 LTVIA1
RDS_ALU2 LALU2
RDS_TALU2 LTALU2
RDS_VIA2 LVIA2
RDS_ALU3 LALU3
RDS_TALU3 LTALU3
RDS_VIA3 LVIA3
RDS_ALU4 LALU4
RDS_TALU4 LTALU4
RDS_VIA4 LVIA4
RDS_ALU5 LALU5
RDS_TALU5 LTALU5
RDS_VIA5 LVIA5
RDS_ALU6 LALU6
RDS_TALU6 LTALU6
RDS_REF LREF
END
##-------------------------------------------------------------------
# TABLE GDS_LAYER :
##-------------------------------------------------------------------
TABLE GDS_LAYER
RDS_NWELL 1
RDS_NDIF 3
RDS_PDIF 4
RDS_NTIE 5
RDS_PTIE 6
RDS_POLY 7
RDS_POLY2 8
RDS_TPOLY 9
RDS_CONT 10
RDS_ALU1 11
RDS_VALU1 12
RDS_TALU1 13
RDS_VIA1 14
RDS_TVIA1 15
RDS_ALU2 16
RDS_TALU2 17
RDS_VIA2 18
RDS_ALU3 19
RDS_TALU3 20
RDS_VIA3 21
RDS_ALU4 22
RDS_TALU4 23
RDS_VIA4 25
RDS_ALU5 26
RDS_TALU5 27
RDS_VIA5 28
RDS_ALU6 29
RDS_TALU6 30
RDS_REF 24
END
##-------------------------------------------------------------------
# TABLE S2R_POST_TREAT :
##-------------------------------------------------------------------
TABLE S2R_POST_TREAT
END
DRC_RULES
layer RDS_NWELL 4.;
layer RDS_NTIE 2.;
layer RDS_PTIE 2.;
layer RDS_NDIF 2.;
layer RDS_PDIF 2.;
layer RDS_ACTIV 2.;
layer RDS_CONT 1.;
layer RDS_VIA1 1.;
layer RDS_VIA2 1.;
layer RDS_VIA3 1.;
layer RDS_VIA4 1.;
layer RDS_VIA5 1.;
layer RDS_POLY 1.;
layer RDS_POLY2 1.;
layer RDS_ALU1 1.;
layer RDS_ALU2 2.;
layer RDS_ALU3 2.;
layer RDS_ALU4 2.;
layer RDS_ALU5 2.;
layer RDS_ALU6 2.;
layer RDS_USER0 1.;
layer RDS_USER1 1.;
layer RDS_USER2 1.;
rules
# Note : ``>:'' is different from ``>=''.
# >: is applied on polygons and >= is applied on rectangles.
# There is the same difference between <: and <=.
# >= is faster than >:, but >: must be used where it is
# required to consider polygons, for example spacing of
# two objects in the same layer
#
# There is no rule to check NTIE and PDIF are included in NWELL
# since this is necessarily true
#-----------------------------------------------------------
# Check the NWELL shapes
#-----------------------
characterize RDS_NWELL (
rule 1 : width >= 4. ;
rule 2 : intersection_length >: 4. ;
rule 3 : notch >= 12. ;
);
relation RDS_NWELL, RDS_NWELL (
rule 4 : spacing axial >: 12. ;
);
# Check RDS_PTIE is really excluded outside NWELL
#------------------------------------------------
relation RDS_PTIE, RDS_NWELL (
rule 5 : spacing axial >= 7.5;
rule 6 : enveloppe intersection_length < 0. ;
rule 7 : margin intersection_length < 0. ;
rule 8 : cross intersection_length < 0. ;
rule 9 : intersection intersection_length < 0. ;
rule 10 : extension intersection_length < 0. ;
rule 11 : inclusion intersection_length < 0. ;
);
# Check RDS_NDIF is really excluded outside NWELL
#------------------------------------------------
relation RDS_NDIF, RDS_NWELL (
rule 12 : spacing axial >= 7.5;
rule 13 : enveloppe intersection_length < 0. ;
rule 14 : margin intersection_length < 0. ;
rule 15 : cross intersection_length < 0. ;
rule 16 : intersection intersection_length < 0. ;
rule 17 : extension intersection_length < 0. ;
rule 18 : inclusion intersection_length < 0. ;
);
# Check the RDS_PDIF shapes
#--------------------------
characterize RDS_PDIF (
rule 19 : width >= 2. ;
rule 20 : intersection_length >: 2. ;
rule 21 : notch >= 3. ;
);
relation RDS_PDIF, RDS_PDIF (
rule 22 : spacing axial >: 3. ;
);
# Check the RDS_NDIF shapes
#--------------------------
characterize RDS_NDIF (
rule 23 : width >= 2. ;
rule 24 : intersection_length >: 2. ;
rule 25 : notch >= 3. ;
);
relation RDS_NDIF, RDS_NDIF (
rule 26 : spacing axial >: 3. ;
);
# Check the RDS_PTIE shapes
#--------------------------
characterize RDS_PTIE (
rule 27 : width >= 2. ;
rule 28 : intersection_length >: 2. ;
rule 29 : notch >= 3. ;
);
relation RDS_PTIE, RDS_PTIE (
rule 30 : spacing axial >: 3. ;
);
# Check the RDS_NTIE shapes
#--------------------------
characterize RDS_NTIE (
rule 31 : width >= 2. ;
rule 32 : intersection_length >: 2. ;
rule 33 : notch >= 3. ;
);
relation RDS_NTIE, RDS_NTIE (
rule 34 : spacing axial >: 3. ;
);
define RDS_PDIF, RDS_PTIE union -> ANY_P_DIF;
define RDS_NDIF, RDS_NTIE union -> ANY_N_DIF;
# Check the ANY_N_DIF ANY_P_DIFF exclusion
#--------------------------------------
relation ANY_N_DIF, ANY_P_DIF (
rule 35 : spacing axial >= 3. ;
rule 36 : enveloppe intersection_length < 0. ;
rule 37 : margin intersection_length < 0. ;
rule 38 : cross intersection_length < 0. ;
rule 39 : intersection intersection_length < 0. ;
rule 40 : extension intersection_length < 0. ;
rule 41 : inclusion intersection_length < 0. ;
);
undefine ANY_P_DIF;
undefine ANY_N_DIF;
define RDS_NDIF, RDS_PDIF union -> NP_DIF;
# Check RDS_POLY related to NP_DIF
#---------------------------------
relation RDS_POLY, NP_DIF (
rule 42 : spacing axial >= 1. ;
rule 43 : intersection intersection_length < 0. ;
);
define NP_DIF, RDS_POLY intersection -> CHANNEL;
# Check the RDS_POLY shapes
#--------------------------
characterize RDS_POLY (
rule 44 : width >= 1. ;
rule 45 : intersection_length >: 1. ;
rule 46 : notch >= 2. ;
);
relation RDS_POLY, RDS_POLY (
rule 47 : spacing axial >: 2.;
);
define NP_DIF, RDS_CONT intersection -> CONT_DIFF;
# Check the CHANNEL shapes
#--------------------------
characterize CHANNEL (
rule 48 : notch >= 3. ;
);
relation CHANNEL, CHANNEL (
rule 49 : spacing axial >: 3.;
);
undefine CHANNEL;
# Check RDS_POLY is distant from ACTIV ZONE of TRANSISTOR
#--------------------------------------------------------
relation RDS_POLY, RDS_ACTIV (
rule 79 : spacing axial >= 1. ;
);
relation RDS_POLY, CONT_DIFF (
rule 50 : spacing axial >= 2. ;
);
undefine CONT_DIFF;
undefine NP_DIF;
# Check RDS_ALU1 shapes
#----------------------
characterize RDS_ALU1 (
rule 51 : width >= 1. ;
rule 52 : intersection_length >: 1. ;
rule 53 : notch >= 3. ;
);
relation RDS_ALU1, RDS_ALU1 (
rule 54 : spacing axial >: 3. ;
);
# Check RDS_ALU2 shapes
#----------------------
characterize RDS_ALU2 (
rule 55 : width >= 2. ;
rule 56 : intersection_length >: 2. ;
rule 57 : notch >= 3. ;
);
relation RDS_ALU2, RDS_ALU2 (
rule 58 : spacing axial >: 3. ;
);
# Check RDS_ALU3 shapes
#----------------------
characterize RDS_ALU3 (
rule 59 : width >= 2. ;
rule 60 : intersection_length >: 2. ;
rule 61 : notch >= 3. ;
);
relation RDS_ALU3, RDS_ALU3 (
rule 62 : spacing axial >: 3. ;
);
# Check RDS_ALU4 shapes
#----------------------
characterize RDS_ALU4 (
rule 63 : width >= 2. ;
rule 64 : intersection_length >: 2. ;
rule 65 : notch >= 3. ;
);
relation RDS_ALU4, RDS_ALU4 (
rule 66 : spacing axial >: 3. ;
);
# Check RDS_ALU5 shapes
#----------------------
characterize RDS_ALU5 (
rule 80 : width >= 2. ;
rule 81 : intersection_length >: 2. ;
rule 82 : notch >= 3. ;
);
relation RDS_ALU5, RDS_ALU5 (
rule 83 : spacing axial >: 3. ;
);
# Check RDS_ALU6 shapes
#----------------------
characterize RDS_ALU6 (
rule 84 : width >= 2. ;
rule 85 : intersection_length >: 2. ;
rule 86 : notch >= 3. ;
);
relation RDS_ALU6, RDS_ALU6 (
rule 87 : spacing axial >: 3. ;
);
# Check ANY_VIA layers, stacking are free
#----------------------------------------
relation RDS_CONT, RDS_CONT (
rule 67 : spacing axial >= 3. ;
);
relation RDS_VIA, RDS_VIA (
rule 68 : spacing axial >= 4. ;
);
relation RDS_VIA2, RDS_VIA2 (
rule 69 : spacing axial >= 4. ;
);
relation RDS_VIA3, RDS_VIA3 (
rule 70 : spacing axial >= 4. ;
);
relation RDS_VIA4, RDS_VIA4 (
rule 88 : spacing axial >= 4. ;
);
relation RDS_VIA5, RDS_VIA5 (
rule 89 : spacing axial >= 4. ;
);
characterize RDS_CONT (
rule 71 : width >= 1. ;
rule 72 : length <= 1. ;
);
characterize RDS_VIA (
rule 73 : width >= 1. ;
rule 74 : length <= 1. ;
);
characterize RDS_VIA2 (
rule 75 : width >= 1. ;
rule 76 : length <= 1. ;
);
characterize RDS_VIA3 (
rule 77 : width >= 1. ;
rule 78 : length <= 1. ;
);
characterize RDS_VIA4 (
rule 90 : width >= 1. ;
rule 91 : length <= 1. ;
);
characterize RDS_VIA5 (
rule 92 : width >= 1. ;
rule 93 : length <= 1. ;
);
# Check the POLY2 shapes
#-----------------------
characterize RDS_POLY2 (
rule 94 : width >= 1. ;
rule 95 : intersection_length >: 1. ;
rule 96 : notch >= 5. ;
);
relation RDS_POLY2, RDS_POLY2 (
rule 97 : spacing axial >: 5. ;
);
# Check RDS_POLY2 is really included inside RDS_POLY1
#----------------------------------------------------
relation RDS_POLY, RDS_POLY2 (
rule 98 : spacing axial < 0.;
rule 99 : envelope inferior >: 5. ;
rule 100 : margin intersection_length < 0. ;
rule 101 : cross intersection_length < 0. ;
rule 102 : intersection intersection_length < 0. ;
rule 103 : extension intersection_length < 0. ;
rule 104 : inclusion intersection_length < 0. ;
);
end rules
DRC_COMMENT
1 (RDS_NWELL) minimum width 4.
2 (RDS_NWELL) minimum width 4.
3 (RDS_NWELL) Manhatan distance min 12.
4 (RDS_NWELL,RDS_NWELL) Manhatan distance min 12.
5 (RDS_PTIE,RDS_NWELL) Manhatan distance min 7.5
6 (RDS_PTIE,RDS_NWELL) must never been in contact
7 (RDS_PTIE,RDS_NWELL) must never been in contact
8 (RDS_PTIE,RDS_NWELL) must never been in contact
9 (RDS_PTIE,RDS_NWELL) must never been in contact
10 (RDS_PTIE,RDS_NWELL) must never been in contact
11 (RDS_PTIE,RDS_NWELL) must never been in contact
12 (RDS_NDIF,RDS_NWELL) Manhatan distance min 7.5
13 (RDS_NDIF,RDS_NWELL) must never been in contact
14 (RDS_NDIF,RDS_NWELL) must never been in contact
15 (RDS_NDIF,RDS_NWELL) must never been in contact
16 (RDS_NDIF,RDS_NWELL) must never been in contact
17 (RDS_NDIF,RDS_NWELL) must never been in contact
18 (RDS_NDIF,RDS_NWELL) must never been in contact
19 (RDS_PDIF) minimum width 2.
20 (RDS_PDIF) minimum width 2.
21 (RDS_PDIF) Manhatan distance min 3.
22 (RDS_PDIF,RDS_PDIF) Manhatan distance min 3.
23 (RDS_NDIF) minimum width 2.
24 (RDS_NDIF) minimum width 2.
25 (RDS_NDIF) Manhatan distance min 3.
26 (RDS_NDIF,RDS_NDIF) Manhatan distance min 3.
27 (RDS_PTIE) minimum width 2.
28 (RDS_PTIE) minimum width 2.
29 (RDS_PTIE) Manhatan distance min 3.
30 (RDS_PTIE,RDS_PTIE) Manhatan distance min 3.
31 (RDS_NTIE) minimum width 2.
32 (RDS_NTIE) minimum width 2.
33 (RDS_NTIE) Manhatan distance min 3.
34 (RDS_NTIE,RDS_NTIE) Manhatan distance min 3.
35 (ANY_N_DIF,ANY_P_DIF) Manhatan distance min 3.
36 (ANY_N_DIF,ANY_P_DIF) must never been in contact
37 (ANY_N_DIF,ANY_P_DIF) must never been in contact
38 (ANY_N_DIF,ANY_P_DIF) must never been in contact
39 (ANY_N_DIF,ANY_P_DIF) must never been in contact
40 (ANY_N_DIF,ANY_P_DIF) must never been in contact
41 (ANY_N_DIF,ANY_P_DIF) must never been in contact
42 (RDS_POLY,ANY_N_DIF) Manhatan distance min 1.
43 (RDS_POLY,NP_DIF) bad intersection
44 (RDS_POLY) minimum width 1.
45 (RDS_POLY) minimum width 1.
46 (RDS_POLY) Manhatan distance min 2.
47 (RDS_POLY,RDS_POLY) Manhatan distance min 2.
48 (CHANNEL) Manhatan distance min 3.
49 (CHANNEL,CHANNEL) Manhatan distance min 3.
50 (RDS_POLY,CONT_DIFF) Manhatan distance min 2.
51 (RDS_ALU1) minimum width 1.
52 (RDS_ALU1) minimum width 1.
53 (RDS_ALU1) Manhatan distance min 3.
54 (RDS_ALU1,RDS_ALU1) Manhatan distance min 3.
55 (RDS_ALU2) minimum width 2.
56 (RDS_ALU2) minimum width 2.
57 (RDS_ALU2) Manhatan distance min 3.
58 (RDS_ALU2,RDS_ALU2) Manhatan distance min 3.
59 (RDS_ALU3) minimum width 2.
60 (RDS_ALU3) minimum width 2.
61 (RDS_ALU3) Manhatan distance min 3.
62 (RDS_ALU3,RDS_ALU3) Manhatan distance min 3.
63 (RDS_ALU4) minimum width 2.
64 (RDS_ALU4) minimum width 2.
65 (RDS_ALU4) Manhatan distance min 3.
66 (RDS_ALU4,RDS_ALU4) Manhatan distance min 3.
67 (RDS_CONT,RDS_CONT) Manhatan distance min 3.
68 (RDS_VIA,RDS_VIA) Manhatan distance min 4.
69 (RDS_VIA2,RDS_VIA2) Manhatan distance min 4.
70 (RDS_VIA3,RDS_VIA3) Manhatan distance min 4.
71 (RDS_CONT) minimum width 1.
72 (RDS_CONT) maximum length 1.
73 (RDS_VIA) minimum width 1.
74 (RDS_VIA) maximum length 1.
75 (RDS_VIA2) minimum width 1.
76 (RDS_VIA2) maximum length 1.
77 (RDS_VIA3) minimum width 1.
78 (RDS_VIA3) maximum length 1.
79 (RDS_POLY,RDS_ACTIV) Manhatan distance min 1.
80 (RDS_ALU5) minimum width 2.
81 (RDS_ALU5) minimum width 2.
82 (RDS_ALU5) Manhatan distance min 4.
83 (RDS_ALU5,RDS_ALU5) Manhatan distance min 4.
84 (RDS_ALU6) minimum width 2.
85 (RDS_ALU6) minimum width 2.
86 (RDS_ALU6) Manhatan distance min 4.
87 (RDS_ALU6,RDS_ALU6) Manhatan distance min 4.
88 (RDS_VIA4,RDS_VIA4) Manhatan distance min 4.
89 (RDS_VIA5,RDS_VIA5) Manhatan distance min 4.
90 (RDS_VIA4) minimum width 1.
91 (RDS_VIA4) maximum length 1.
92 (RDS_VIA5) minimum width 1.
93 (RDS_VIA5) maximum length 1.
94 (RDS_POLY2) minimum width 1.
95 (RDS_POLY2) minimum width 1.
96 (RDS_POLY2) Manhatan distance min 5.
97 (RDS_POLY2,POLY2) Manhatan distance min 5.
98 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
99 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
100 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
101 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
102 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
103 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
104 (RDS_POLY,RDS_POLY2) POLY2 must be enclosed by POLY of 5.
END_DRC_COMMENT
END_DRC_RULES

View File

@ -1,10 +1,9 @@
#! /bin/sh
# ylwrap - wrapper for lex/yacc invocations.
scriptversion=2009-04-28.21; # UTC
scriptversion=2012-12-21.17; # UTC
# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
# 2007, 2009 Free Software Foundation, Inc.
# Copyright (C) 1996-2013 Free Software Foundation, Inc.
#
# Written by Tom Tromey <tromey@cygnus.com>.
#
@ -30,9 +29,41 @@ scriptversion=2009-04-28.21; # UTC
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
get_dirname ()
{
case $1 in
*/*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';;
# Otherwise, we want the empty string (not ".").
esac
}
# guard FILE
# ----------
# The CPP macro used to guard inclusion of FILE.
guard()
{
printf '%s\n' "$1" \
| sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \
-e 's/__*/_/g'
}
# quote_for_sed [STRING]
# ----------------------
# Return STRING (or stdin) quoted to be used as a sed pattern.
quote_for_sed ()
{
case $# in
0) cat;;
1) printf '%s\n' "$1";;
esac \
| sed -e 's|[][\\.*]|\\&|g'
}
case "$1" in
'')
echo "$0: No files given. Try \`$0 --help' for more information." 1>&2
echo "$0: No files given. Try '$0 --help' for more information." 1>&2
exit 1
;;
--basedir)
@ -67,6 +98,8 @@ esac
# The input.
input="$1"
shift
# We'll later need for a correct munging of "#line" directives.
input_sub_rx=`get_dirname "$input" | quote_for_sed`
case "$input" in
[\\/]* | ?:[\\/]*)
# Absolute path; do nothing.
@ -76,15 +109,47 @@ case "$input" in
input="`pwd`/$input"
;;
esac
input_rx=`get_dirname "$input" | quote_for_sed`
# Since DOS filename conventions don't allow two dots,
# the DOS version of Bison writes out y_tab.c instead of y.tab.c
# and y_tab.h instead of y.tab.h. Test to see if this is the case.
y_tab_nodot=false
if test -f y_tab.c || test -f y_tab.h; then
y_tab_nodot=true
fi
# The parser itself, the first file, is the destination of the .y.c
# rule in the Makefile.
parser=$1
# A sed program to s/FROM/TO/g for all the FROM/TO so that, for
# instance, we rename #include "y.tab.h" into #include "parse.h"
# during the conversion from y.tab.c to parse.c.
sed_fix_filenames=
# Also rename header guards, as Bison 2.7 for instance uses its header
# guard in its implementation file.
sed_fix_header_guards=
pairlist=
while test "$#" -ne 0; do
if test "$1" = "--"; then
shift
break
fi
pairlist="$pairlist $1"
from=$1
# Handle y_tab.c and y_tab.h output by DOS
if $y_tab_nodot; then
case $from in
"y.tab.c") from=y_tab.c;;
"y.tab.h") from=y_tab.h;;
esac
fi
shift
to=$1
shift
sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
done
# The program to run.
@ -99,7 +164,11 @@ esac
# FIXME: add hostname here for parallel makes that run commands on
# other machines. But that might take us over the 14-char limit.
dirname=ylwrap$$
trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
trap "ret=141; $do_exit" 13
trap "ret=143; $do_exit" 15
mkdir $dirname || exit 1
cd $dirname
@ -111,98 +180,56 @@ esac
ret=$?
if test $ret -eq 0; then
set X $pairlist
shift
first=yes
# Since DOS filename conventions don't allow two dots,
# the DOS version of Bison writes out y_tab.c instead of y.tab.c
# and y_tab.h instead of y.tab.h. Test to see if this is the case.
y_tab_nodot="no"
if test -f y_tab.c || test -f y_tab.h; then
y_tab_nodot="yes"
fi
# The directory holding the input.
input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
# Quote $INPUT_DIR so we can use it in a regexp.
# FIXME: really we should care about more than `.' and `\'.
input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
while test "$#" -ne 0; do
from="$1"
# Handle y_tab.c and y_tab.h output by DOS
if test $y_tab_nodot = "yes"; then
if test $from = "y.tab.c"; then
from="y_tab.c"
else
if test $from = "y.tab.h"; then
from="y_tab.h"
fi
fi
fi
for from in *
do
to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
if test -f "$from"; then
# If $2 is an absolute path name, then just use that,
# otherwise prepend `../'.
case "$2" in
[\\/]* | ?:[\\/]*) target="$2";;
*) target="../$2";;
# otherwise prepend '../'.
case $to in
[\\/]* | ?:[\\/]*) target=$to;;
*) target="../$to";;
esac
# We do not want to overwrite a header file if it hasn't
# changed. This avoid useless recompilations. However the
# parser itself (the first file) should always be updated,
# because it is the destination of the .y.c rule in the
# Makefile. Divert the output of all other files to a temporary
# file so we can compare them to existing versions.
if test $first = no; then
realtarget="$target"
target="tmp-`echo $target | sed s/.*[\\/]//g`"
# Do not overwrite unchanged header files to avoid useless
# recompilations. Always update the parser itself: it is the
# destination of the .y.c rule in the Makefile. Divert the
# output of all other files to a temporary file so we can
# compare them to existing versions.
if test $from != $parser; then
realtarget="$target"
target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
fi
# Edit out `#line' or `#' directives.
#
# We don't want the resulting debug information to point at
# an absolute srcdir; it is better for it to just mention the
# .y file with no path.
#
# We want to use the real output file name, not yy.lex.c for
# instance.
#
# We want the include guards to be adjusted too.
FROM=`echo "$from" | sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
TARGET=`echo "$2" | sed \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
-e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
# Munge "#line" or "#" directives. Don't let the resulting
# debug information point at an absolute srcdir. Use the real
# output file name, not yy.lex.c for instance. Adjust the
# include guards too.
sed -e "/^#/!b" \
-e "s|$input_rx|$input_sub_rx|" \
-e "$sed_fix_filenames" \
-e "$sed_fix_header_guards" \
"$from" >"$target" || ret=$?
# Check whether header files must be updated.
if test $first = no; then
if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
echo "$2" is unchanged
rm -f "$target"
else
echo updating "$2"
# Check whether files must be updated.
if test "$from" != "$parser"; then
if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
echo "$to is unchanged"
rm -f "$target"
else
echo "updating $to"
mv -f "$target" "$realtarget"
fi
fi
else
# A missing file is only an error for the first file. This
# is a blatant hack to let us support using "yacc -d". If -d
# is not specified, we don't want an error when the header
# file is "missing".
if test $first = yes; then
# A missing file is only an error for the parser. This is a
# blatant hack to let us support using "yacc -d". If -d is not
# specified, don't fail when the header file is "missing".
if test "$from" = "$parser"; then
ret=1
fi
fi
shift
shift
first=no
done
else
ret=$?
fi
# Remove the directory.