Changeset 16 in dev
- Timestamp:
- Dec 12, 2006, 4:11:11 AM (18 years ago)
- Location:
- BasicCompiler_Common
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Compile.cpp
r15 r16 48 48 //With情報 49 49 WITHINFO WithInfo; 50 51 52 /////////////////////////////////////////////////// 53 // 対になっているステートメントを飛び越す 54 // ※グローバル領域用 55 /////////////////////////////////////////////////// 56 int JumpStatement(const char *source, int &pos){ 57 if( source[pos] != 1 ) return 0; 58 59 if( ! IsCommandDelimitation( source[pos - 1] ) ){ 60 //直前がコマンド区切りではない場合 61 return 0; 62 } 63 64 char cStatement = source[pos + 1]; 65 66 char cEnd = GetEndXXXCommand( cStatement ); 67 if( cEnd == 0 ) return 0; 68 69 pos += 2; 70 while( ! ( source[pos] == 1 && source[pos + 1] == cEnd ) ){ 71 72 if( source[pos] == '\0' ){ 73 char temporary[64]; 74 GetDefaultNameFromES( cStatement, temporary ); 75 SetError( 22, temporary, pos ); 76 return -1; 77 } 78 79 pos++; 80 } 81 if( ! ( source[pos] == '\0' || source[pos + 2] == '\0' ) ){ 82 pos += 2; 83 } 84 85 return 1; 86 } 50 87 51 88 … … 392 429 BufferSize=128; 393 430 Command=(char *)HeapAlloc(hHeap,0,BufferSize); 394 /* 395 i = CSource::obj.GetTokenIndex(cp); 396 CToken *ptoken; 397 do{ 398 //次のトークン 399 ptoken = CSource::obj.GetToken(i++); 400 401 //ステップ区切り(改行またはコロン)の場合 402 while(ptoken->GetType() == TOKEN_DELIMITATION){ 403 ptoken = CSource::obj.GetToken(i++); 404 continue; 405 } 406 407 if(ptoken->GetType() == TOKEN_ESCAPESEQUENCE){ 408 //////////////////////////// 409 // 特殊記号 410 //////////////////////////// 411 412 if(ptoken->GetExtended() == ESC_LINENUM){ 413 414 //行番号 415 ptoken = CSource::obj.GetToken(i++); 416 417 i3=atoi(ptoken->ToString()); 418 i4=i+1; 419 420 //Goto先ラベル 421 pLabelNames=(LABEL *)HeapReAlloc(hHeap,0,pLabelNames,(MaxLabelNum+1)*sizeof(LABEL)); 422 pLabelNames[MaxLabelNum].pName=0; 423 pLabelNames[MaxLabelNum].line=i3; 424 pLabelNames[MaxLabelNum].address=obp; 425 MaxLabelNum++; 426 427 //書き込みスケジュール 428 for(i=0;i<GotoLabelScheduleNum;i++){ 429 if(pGotoLabelSchedule[i].pName==0&& 430 pGotoLabelSchedule[i].line==i3){ 431 *((long *)(OpBuffer+pGotoLabelSchedule[i].pos))=obp-(pGotoLabelSchedule[i].pos+sizeof(long)); 432 433 //詰める 434 GotoLabelScheduleNum--; 435 for(i2=i;i2<GotoLabelScheduleNum;i2++){ 436 pGotoLabelSchedule[i2].pName=pGotoLabelSchedule[i2+1].pName; 437 pGotoLabelSchedule[i2].line=pGotoLabelSchedule[i2+1].line; 438 pGotoLabelSchedule[i2].pos=pGotoLabelSchedule[i2+1].pos; 439 } 440 i--; 441 } 442 } 443 444 //カンマ 445 i++; 446 447 //次のトークン 448 ptoken = CSource::obj.GetToken(i++); 449 } 450 } 451 }while(ptoken->GetType() == TOKEN_EOF); 452 */ 431 453 432 for(cp++,i2=0;;cp++,i2++){ 454 433 if(i2>=BufferSize){ -
BasicCompiler_Common/DebugMiddleFile.cpp
r15 r16 441 441 char temp2[MAX_PATH],*temp5; 442 442 443 extern CClass *pobj_CompilingClass; 444 pobj_CompilingClass=0; 445 443 446 i2=0; 444 447 -
BasicCompiler_Common/Intermediate_Step2.cpp
r7 r16 237 237 } 238 238 } 239 voidGetConstInfo(void){239 bool GetConstInfo(void){ 240 240 //////////////////////////////////////////// 241 241 // Const命令の情報を取得 … … 251 251 extern char *basbuf; 252 252 for(i=0;;i++){ 253 if(basbuf[i]=='\0') break; 254 else if(basbuf[i]==1&&basbuf[i+1]==ESC_CONST){ 255 i+=2; 256 257 extern int cp; 258 cp=i; //エラー用 259 260 261 if(basbuf[i]==1&&basbuf[i+1]==ESC_ENUM){ 262 AddConstEnum(basbuf+i); 263 continue; 264 } 265 266 for(i2=0;;i++,i2++){ 267 if(basbuf[i]=='\"'){ 253 if( basbuf[i] == '\0' ) break; 254 if( basbuf[i] == 1 ){ 255 if(basbuf[i]==1&&basbuf[i+1]==ESC_CONST){ 256 i+=2; 257 258 extern int cp; 259 cp=i; //エラー用 260 261 262 if(basbuf[i]==1&&basbuf[i+1]==ESC_ENUM){ 263 AddConstEnum(basbuf+i); 264 continue; 265 } 266 267 for(i2=0;;i++,i2++){ 268 if(basbuf[i]=='\"'){ 269 temporary[i2]=basbuf[i]; 270 for(i++,i2++;;i++,i2++){ 271 temporary[i2]=basbuf[i]; 272 if(basbuf[i]=='\"') break; 273 } 274 continue; 275 } 276 if(IsCommandDelimitation(basbuf[i])){ 277 temporary[i2]=0; 278 break; 279 } 268 280 temporary[i2]=basbuf[i]; 269 for(i++,i2++;;i++,i2++){ 270 temporary[i2]=basbuf[i]; 271 if(basbuf[i]=='\"') break; 272 } 273 continue; 274 } 275 if(IsCommandDelimitation(basbuf[i])){ 276 temporary[i2]=0; 277 break; 278 } 279 temporary[i2]=basbuf[i]; 280 } 281 CDBConst::obj.Add(temporary); 282 if(basbuf[i]=='\0') break; 283 } 284 } 281 } 282 CDBConst::obj.Add(temporary); 283 if(basbuf[i]=='\0') break; 284 } 285 else{ 286 int result = JumpStatement( basbuf, i ); 287 if( result == -1 ){ 288 //エラー 289 return false; 290 } 291 else if( result == 1 ){ 292 //ジャンプした場合 293 i--; 294 } 295 } 296 } 297 } 298 return true; 285 299 } 286 300 -
BasicCompiler_Common/common.h
r15 r16 471 471 472 472 //Intermediate_Step2.cpp 473 voidGetConstInfo(void);473 bool GetConstInfo(void); 474 474 void ChangeCommandToCode(char *buffer); 475 475 … … 575 575 576 576 //Compile.cpp 577 int JumpStatement(const char *source, int &pos); 577 578 void DebugVariable(void); 578 579 void Compile(void);
Note:
See TracChangeset
for help on using the changeset viewer.