1 /************************************************************/
3 /************************************************************/
5 /************************************************************/
7 /************************************************************/
12 #include "slib_error.h"
15 library *SLIB_LIBRARY;
16 symbol_list *SLIB_CURRENT_SYMBOL;
27 extern int slibParseLine ;
28 extern eqt_ctx *slibEqtCtx;
34 /************************************************************/
35 /* union pour yylval */
36 /************************************************************/
46 /************************************************************/
48 /************************************************************/
49 %token <string_type> EGAL SEMI COLON COMMA
50 %token <string_type> LPAR RPAR LCURLY RCURLY
51 %token LIB SYMBOL SYMBNAME LAYER SUB_SYMB AREA ANNOTATE
52 %token LINE ARC CIRCLE PIN T_GRID
53 %token <string_type> NUM
54 %token <string_type> STRING
55 %token <string_type> OPE
57 %type <string_type> expression_list make_expression operateur primary function choice
58 %type <double_type> expression
63 slibEqtCtx->EQT_RES_CALC = EQT_COMPLETE;
64 if(!eqt_getvar (slibEqtCtx,namealloc("AND_HEIGHT")))
65 slib_error(ERR_NO_REF_HEIGHT, slibParseLine,NULL);
67 SLIB_LIBRARY->REFHEIGHT = eqt_getvar(slibEqtCtx,namealloc("AND_HEIGHT"));
69 SLIB_LIBRARY->SYMB = (symbol_list *)reverse((chain_list *)SLIB_LIBRARY->SYMB);
73 group : head LCURLY statements RCURLY
79 statements : statement
81 | statements statement
87 | function SEMI { mbkfree($1); }
93 | T_GRID LPAR choice RPAR SEMI
95 slib_set_lib_grid( SLIB_LIBRARY, eqt_eval(slibEqtCtx,namealloc($3),EQTFAST) );
97 if(eqt_resistrue(slibEqtCtx) != EQT_COMPLETE)
98 slib_error(ERR_NO_GRID, slibParseLine,$3);
102 choice : NUM { $$=$1; }
106 egality : STRING EGAL expression
108 if(eqt_resistrue(slibEqtCtx))
109 eqt_addvar(slibEqtCtx,namealloc($1),$3);
111 slib_error(ERR_NO_EVAL, slibParseLine,$1);
115 define : STRING COLON expression {}
118 canonicalname : SYMBNAME COLON STRING SEMI
125 slib_set_function(slibEqtCtx);
135 head : ident LPAR STRING RPAR
138 SLIB_LIBRARY = slib_create_lib($3) ;
141 SLIB_CURRENT_SYMBOL = slib_add_symbol(SLIB_LIBRARY,$3);
147 call : SUB_SYMB LPAR STRING COMMA expression COMMA expression COMMA expression RPAR
149 if(!slib_getsymbol(SLIB_LIBRARY, $3))
150 slib_error(ERR_NO_SYMBOL, slibParseLine,$3);
152 slib_add_subsymbol(SLIB_LIBRARY,SLIB_CURRENT_SYMBOL,$3,$5,$7,$9);
156 useless : AREA LPAR expression_list RPAR
160 draw : LINE LPAR expression COMMA expression COMMA expression COMMA expression RPAR
162 slib_add_draw_line(SLIB_CURRENT_SYMBOL,$3,$5,$7,$9,SLIB_LIBRARY->GRID);
164 | ARC LPAR expression COMMA expression COMMA expression COMMA expression COMMA expression COMMA expression RPAR
166 slib_add_draw_arc(SLIB_CURRENT_SYMBOL,$3,$5,$7,$9,$11,$13,SLIB_LIBRARY->GRID);
168 | CIRCLE LPAR expression COMMA expression COMMA expression RPAR
170 slib_add_draw_circle(SLIB_CURRENT_SYMBOL,$3,$5,$7,SLIB_LIBRARY->GRID);
172 | PIN LPAR STRING COMMA expression COMMA expression COMMA STRING RPAR
176 if( !strcasecmp($9,"UP") )
177 pin_direction = SLIB_PIN_UP ;
178 else if ( !strcasecmp($9,"DOWN") )
179 pin_direction = SLIB_PIN_DOWN ;
180 else if ( !strcasecmp($9,"LEFT") )
181 pin_direction = SLIB_PIN_LEFT ;
182 else if ( !strcasecmp($9,"RIGHT") )
183 pin_direction = SLIB_PIN_RIGHT ;
185 slib_error(ERR_PIN_DIR, slibParseLine,$9);
187 slib_add_draw_pin(SLIB_CURRENT_SYMBOL,$3,$5,$7,pin_direction,SLIB_LIBRARY->GRID);
192 function : STRING LPAR expression_list RPAR
199 $$ = mbkstrdup(concat);
200 //printf("### fonction crée:\t%s\n",$$);
205 expression_list : expression
208 sprintf(concat,"%f",$1);
209 $$ = mbkstrdup(concat);
211 | expression_list COMMA expression
215 sprintf(rescue,"%f",$3);
218 strcat(concat, rescue);
219 $$ = mbkstrdup(concat);
224 expression : make_expression
226 $$ = eqt_eval(slibEqtCtx,namealloc($1),EQTFAST);
231 make_expression : operateur primary
236 $$ = mbkstrdup(concat);
239 | make_expression OPE primary
245 $$ = mbkstrdup(concat);
246 mbkfree($1); mbkfree($3);
248 | operateur LPAR make_expression RPAR
255 $$ = mbkstrdup(concat);
258 | make_expression OPE LPAR make_expression RPAR
266 $$ = mbkstrdup(concat);
267 mbkfree($1); mbkfree($4);
271 operateur : { $$ = ""; }
275 primary : choice { $$ = mbkstrdup($1); }
276 | function { $$ = mbkstrdup($1); mbkfree($1); }
286 printf("SLIB Parse Error at line %d .\n",slibParseLine);
287 EXIT (EXIT_FAILURE) ;