Changeset 2bf04b in git for old_modgen/modgen/scanner.l
- Timestamp:
- Nov 12, 2015, 2:39:46 PM (8 years ago)
- Branches:
- (u'spielwiese', '6e5adcba05493683b94648c659a729c189812c77')
- Children:
- 6da2d6765f8866f8426131bf3a097a5c051e956e
- Parents:
- 412c61b77c65fd4adca8f6576d7f1a597459552e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
old_modgen/modgen/scanner.l
r412c61 r2bf04b 153 153 <COMMENT,COMMENTB,STRING,INITIAL><<EOF>> { 154 154 printf( "EOF encountered inside an action\n"); 155 155 printf("ERRRRROOOOORRR\n"); 156 156 } 157 157 … … 224 224 ^"/*" push_state(YYSTATE, COMMENT, "COMMENT"); yymore(); 225 225 "//".*{NL} ++yylineno; ACTION_ECHO; 226 227 228 229 226 {BOOL} { if(yyleng == 1) sscanf(yytext, "%d", &lvalp->i); 227 else { 228 if(strcasecmp(yytext, "yes")==0) lvalp->i = 1; 229 else lvalp->i = 0; 230 230 } 231 231 return BOOLTOK; } 232 233 234 235 236 237 238 239 240 241 242 243 244 232 ^"%{".*{NL} { 233 yylineno++; 234 push_state(YYSTATE, CODEBLOCK, "CODEBLOCK"); 235 fprintf(module_def.fmtfp, "#line %d \"%s\"\n", 236 yylineno, module_def.filename); 237 } 238 ^"%modinitial".*{NL} { 239 yylineno++; 240 push_state(YYSTATE, MODINITIAL, "MODINITIAL"); 241 fprintf(module_def.fmtfp, "#line %d \"%s\"\n", 242 yylineno, module_def.filename); 243 } 244 {WS} /* discard */ 245 245 {NL} { yylineno++; } 246 246 … … 254 254 } 255 255 256 257 256 ^{NAME} { 257 lvalp->name = strdup(yytext); 258 258 return NAME; 259 259 } 260 261 260 {FILENAME} { 261 lvalp->name = strdup(yytext); 262 262 return FILENAME; 263 263 } 264 264 } 265 265 266 266 <CODEBLOCK>{ … … 269 269 270 270 yylineno++; 271 272 273 274 275 276 277 278 279 271 pop_state(); 272 s = t = lvalp->name = dupyytext(); 273 while (*yytext) 274 { 275 if (*yytext == '\\') yytext++; 276 *s++ = *yytext++; 277 } 278 if(s-t>2 && *(s-1)=='}' && *(s-2)=='%') *(s-2)='\0'; 279 return MCCODETOK; 280 280 } 281 281 {NL} { yylineno++; yymore(); } … … 284 284 <MODINITIAL>{ 285 285 ^"%endinitial".*{NL} { 286 287 286 yylineno++; 287 pop_state(); 288 288 } 289 289 .*{NL} { yylineno++; 290 291 290 lvalp->name = yytext; 291 return CODEPART; } 292 292 } 293 293 <STRING>{ … … 299 299 char * s, *t; 300 300 pop_state(); 301 301 if(do_return) { 302 302 s = t = lvalp->sv.string = dupyytext(); 303 303 while (*yytext) … … 306 306 *s++ = *yytext++; 307 307 } 308 309 310 308 *s++ = *yytext++; 309 do_return = 0; 310 return MSTRINGTOK; 311 311 } else { 312 312 do_return = 0; 313 313 yymore(); 314 314 } 315 316 315 } 316 } 317 317 318 318 <COMMENT>{ … … 321 321 {NL} { yylineno++; yymore(); } 322 322 . { yymore(); } 323 323 } 324 324 325 325 <SECT2>{ … … 333 333 brace2 = 0; /* ( */ 334 334 brace3 = 0; /* [ */ 335 336 335 push_state(YYSTATE, PROCDECL, "PROCDECL"); 336 return PROCDECLTOK; 337 337 } 338 338 example { 339 339 #if DEBUG > 1 340 340 printf(">>>EXAMPLE\n"); 341 341 #endif 342 342 brace1 = 0; /* { */ 343 343 brace2 = 0; /* ( */ 344 344 brace3 = 0; /* [ */ 345 346 347 } 348 345 push_state(YYSTATE, EXAMPLE, "EXAMPLE"); 346 return EXAMPLETOK; 347 } 348 static { return STATICTOK; } 349 349 . { printf("SG(%d) <<<'%s' ", yylineno, yytext); } 350 350 } … … 358 358 example { 359 359 #if DEBUG > 1 360 360 printf(">>>EXAMPLE\n"); 361 361 #endif 362 362 brace1 = 0; /* { */ 363 363 brace2 = 0; /* ( */ 364 364 brace3 = 0; /* [ */ 365 366 367 } 368 369 370 365 push_state(YYSTATE, EXAMPLE, "EXAMPLE"); 366 return EXAMPLETOK; 367 } 368 static { return STATICTOK; } 369 {NAME} { 370 int i,tok; 371 371 #if DEBUG > 1 372 373 #endif 374 372 printf("(%d) VAR: %s\n", yylineno, yytext); 373 #endif 374 i = IsCmd(yytext, tok); 375 375 #if DEBUG > 1 376 377 378 #endif 379 380 381 382 383 384 385 386 387 388 389 390 376 printf("Res=%d, %d => %s\n", i, tok, 377 i ? "VARTYPETOK" : "NAME"); 378 #endif 379 if(i) { 380 lvalp->tp.name = strdup(yytext); 381 lvalp->tp.typ = tok; 382 push_state(YYSTATE, PROCDECL, "PROCDECL"); 383 return VARTYPETOK; 384 } 385 else { 386 //do_return++; 387 lvalp->name = strdup(yytext); 388 push_state(YYSTATE, PROCDECL, "PROCDECL"); 389 return NAME; 390 } 391 391 } 392 392 . { printf("PR(%d) <<<'%s' ", yylineno, yytext); } … … 397 397 {WS} /* ignore */ 398 398 "{" { brace1++; 399 400 401 399 switch_state(YYSTATE, CODEBLOCK2, "CODEBLOCK2"); 400 return '{'; 401 } 402 402 . { printf("ERROR <<<'%s' ", yytext); } 403 403 } … … 406 406 {NL} { yylineno++; } 407 407 .*(\n?) { lvalp->name = yytext; 408 408 return CODEPART; } 409 409 410 410 <<EOF>> { sectnum = 0; 411 412 413 411 iseof=1; 412 lvalp->name = yytext; 413 return SECT4END; 414 414 /* yyterminate(); */ 415 415 } … … 418 418 <PROCDECL>{ 419 419 "{" { brace1++; 420 421 422 420 switch_state(YYSTATE, CODEBLOCK2, "CODEBLOCK2"); 421 return '{'; 422 } 423 423 "/*" push_state(YYSTATE, COMMENT, "COMMENT");yymore(); 424 424 "//".*{NL} ++yylineno; ACTION_ECHO; 425 425 "\"" { do_return++; 426 426 lvalp->sv.lineno = yylineno; 427 427 push_state(YYSTATE, STRING, "string"); 428 428 } 429 430 431 432 429 {BOOL} { if(yyleng == 1) sscanf(yytext, "%d", &lvalp->i); 430 else { 431 if(strcasecmp(yytext, "yes")==0) lvalp->i = 1; 432 else lvalp->i = 0; 433 433 } 434 434 return BOOLTOK; } 435 436 437 435 {NUMBER} { sscanf(yytext, "%d", &lvalp->i); return NUMTOK; } 436 {NAME} { 437 int i,tok; 438 438 #if DEBUG > 1 439 440 #endif 441 439 printf("(%d) VAR: %s\n", yylineno, yytext); 440 #endif 441 i = IsCmd(yytext, tok); 442 442 #if DEBUG > 1 443 444 445 #endif 446 447 448 449 450 451 452 453 454 455 443 printf("Res=%d, %d => %s\n", i, tok, 444 i ? "VARTYPETOK" : "NAME"); 445 #endif 446 if(i) { 447 lvalp->tp.name = strdup(yytext); 448 lvalp->tp.typ = tok; 449 return VARTYPETOK; 450 } 451 else { 452 //do_return++; 453 lvalp->name = strdup(yytext); 454 return NAME; 455 } 456 456 } 457 457 {NL} { yylineno++; } 458 459 460 461 462 463 458 "(" { return '('; } 459 ")" { return ')'; } 460 "," { return ','; } 461 "#" { return '#'; } 462 "=" { return '='; } 463 ";" { return ';'; } 464 464 . { } 465 465 … … 471 471 lvalp->name = yytext; 472 472 return CMTPART; 473 473 yymore(); 474 474 } 475 475 "*" yymore(); 476 476 {NL} { yylineno++; yymore(); } 477 477 . { yymore(); } 478 478 } 479 479 480 480 <CODEBLOCK2>{ … … 482 482 "//".*{NL} { yylineno++; lvalp->name = yytext; return CODEPART; } 483 483 "\"" { 484 484 lvalp->sv.lineno = yylineno; 485 485 push_state(YYSTATE, STRING, "string"); yymore();} 486 486 "{" { brace1++; yymore();} … … 489 489 char * s, *t; 490 490 491 491 pop_state(); 492 492 #if 0 493 494 495 496 497 498 499 493 s = t = lvalp->name = dupyytext(); 494 while (*yytext) 495 { 496 if (*yytext == '\\') yytext++; 497 *s++ = *yytext++; 498 } 499 if(s-t>2 && *(s-1)=='}' && *(s-2)=='%') *(s-2)='\0'; 500 500 #else 501 501 lvalp->name = yytext; … … 504 504 printf("2 BRACE DOWN=%d\n", brace1); 505 505 #endif 506 506 return MCODETOK; 507 507 } else { 508 508 yymore(); 509 509 } 510 510 } 511 511 {NL} { yylineno++; lvalp->name = yytext; return CODEPART; } 512 512 "%" { push_state(YYSTATE, PROCCMDBLOCK, "PROCCMDBLOCK"); 513 513 procedure_decl.flags.start_of_code = 1; 514 514 return '%'; } … … 520 520 <PROCCMDBLOCK>{ 521 521 {col} { pop_state(); return ';'; } 522 523 524 522 "(" { return '('; } 523 ")" { return ')'; } 524 "," { return ','; } 525 525 {WS} /* ignore */ 526 526 {NAME} { lvalp->name = strdup(yytext); return NAME; }
Note: See TracChangeset
for help on using the changeset viewer.