Changeset 15 in dev for BasicCompiler_Common


Ignore:
Timestamp:
Dec 11, 2006, 3:07:59 AM (18 years ago)
Author:
dai_9181
Message:

LexicalAnalysisを廃止。

Location:
BasicCompiler_Common
Files:
2 deleted
10 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/BasicCompiler.cpp

    r14 r15  
    11#include "BasicCompiler.h"
    2 
    32
    43#if defined HeapAlloc
  • BasicCompiler_Common/BasicCompiler.h

    r14 r15  
    1 #include "common.h"
     1#include "../BasicCompiler_Common/common.h"
    22
    33LPSTR BasicFileFilter="プログラム ファイル(*.ab;*.bas;*.abp;*.sbp)\0*.ab;*.bas;*.abp;*sbp\0テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0";
     
    8383BOOL bDll;
    8484
     85char *basbuf;
     86char *pBaseBuffer;
     87
    8588char BasicSystemDir[MAX_PATH];  //BasicCompiler.exeが存在するディレクトリ
    8689char BasicCurDir[MAX_PATH];     //コンパイルするファイルが存在するディレクトリ
  • BasicCompiler_Common/Compile.cpp

    r7 r15  
    392392    BufferSize=128;
    393393    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*/
    394453    for(cp++,i2=0;;cp++,i2++){
    395454        if(i2>=BufferSize){
  • BasicCompiler_Common/DebugMiddleFile.cpp

    r14 r15  
    474474    //ソースコード
    475475    i2++;
    476     CSource::obj.SetSourceCode(buffer + i2);
    477     this->basbuf=CSource::obj.SourceCode;
     476    pBaseBuffer=(char *)HeapAlloc(hHeap,0,lstrlen(buffer+i2)+3);
     477    basbuf=pBaseBuffer+2;
     478    lstrcpy(basbuf,buffer+i2);
     479    i2+=lstrlen(buffer+i2)+1;
    478480    extern char *basbuf;
    479481    basbuf=this->basbuf;
    480     i2+=lstrlen(buffer+i2)+1;
    481482
    482483    //コードと行番号の関係
     
    933934
    934935    //ソースコード
     936    extern char *pBaseBuffer;
    935937    extern char *basbuf;
     938    pBaseBuffer=this->pBaseBuffer;
    936939    basbuf=this->basbuf;
    937940
     
    10131016    DeleteConstInfo(ppConstHash);
    10141017
     1018    //ソースコードを解放
     1019    HeapDefaultFree(pBaseBuffer);
     1020
    10151021    //コードと行番号の関係を解放
    10161022    HeapDefaultFree(pLineInfo);
  • BasicCompiler_Common/DebugSection.h

    r14 r15  
    2525
    2626    //ソースコード
     27    char *pBaseBuffer;
    2728    char *basbuf;
    2829
  • BasicCompiler_Common/MakeExe.cpp

    r14 r15  
    3434}
    3535
     36void AddSourceCode(char *buffer){
     37    char *temp;
     38    temp=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)+8192);
     39    lstrcpy(temp,buffer);
     40
     41    //エスケープシーケンス設定
     42    SetEscapeSequenceFormat(temp);
     43
     44    //コマンド対応
     45    ChangeCommandToCode(temp);
     46
     47    //新しいソースコードバッファの容量
     48    extern char *basbuf;
     49    int NewSize;
     50    NewSize=lstrlen(basbuf)+lstrlen(temp);
     51    NewSize*=2;
     52    NewSize+=255;
     53
     54    //最後尾に貼り付け
     55    extern char *pBaseBuffer;
     56    pBaseBuffer=(char *)HeapReAlloc(hHeap,0,pBaseBuffer,NewSize);
     57    basbuf=pBaseBuffer+2;
     58    lstrcat(basbuf,temp);
     59
     60    HeapDefaultFree(temp);
     61}
     62
    3663void OutputExe(void){
    3764    extern HANDLE hHeap;
    3865    extern char *basbuf;
     66    extern char *pBaseBuffer;
    3967    extern int ErrorNum;
    4068    extern BOOL bStopCompile;
     
    5987    //プログラムをファイルから読み込む
    6088    extern char SourceFileName[MAX_PATH];
    61     CSource::obj.OpenFile(SourceFileName);
    62 
    63     //未完成
    64     basbuf = CSource::obj.SourceCode;
     89    pBaseBuffer=OpenBasicFile(SourceFileName);
     90    if(!pBaseBuffer){
     91        SetError(201,SourceFileName,-1);
     92        goto EndCompile;
     93    }
     94    basbuf=pBaseBuffer+2;
    6595
    6696    //イメージベースの設定
     
    142172
    143173    StepCompileProgress();
    144 
    145 
    146     //字句解析
    147     CSource::obj.LexicalAnalysis(0);
    148174
    149175
     
    265291        HeapDefaultFree(IncludeFileInfo.ppFileNames[i2]);
    266292    HeapDefaultFree(IncludeFileInfo.ppFileNames);
     293
     294    if(pBaseBuffer) HeapDefaultFree(pBaseBuffer);
    267295}
    268296int MainThread(DWORD dummy){
  • BasicCompiler_Common/StrOperation.cpp

    r4 r15  
    249249    return i;
    250250}
    251 int GetStringInPare(char *buffer,char *ReadBuffer){
     251int GetStringInPare(char *buffer,const char *ReadBuffer){
    252252    int i,IsStr,PareNum;
    253253    for(i=0,IsStr=0,PareNum=0;;i++){
     
    294294    return i;
    295295}
    296 int GetStringInBracket(char *buffer,char *ReadBuffer){
     296int GetStringInBracket(char *buffer,const char *ReadBuffer){
    297297    int i,IsStr,PareNum;
    298298    for(i=0,IsStr=0,PareNum=0;;i++){
  • BasicCompiler_Common/calculation.cpp

    r14 r15  
    1010_int64 i64stack[255];
    1111
    12 bool IsNumberTopChar(char *buffer){
     12bool IsNumberTopChar(const char *buffer){
    1313    int c = buffer[0];
    1414    if('0' <= c && c <= '9') return true;
    15     if(buffer[0] == '&' && (buffer[1] == 'h' || buffer[1] == 'H' || buffer[1] == 'o' || buffer[1] == 'O')) return true;
     15    if(c == '&' && (buffer[1] == 'h' || buffer[1] == 'H' || buffer[1] == 'o' || buffer[1] == 'O')) return true;
    1616
    1717    return false;
    1818}
    19 bool IsNumberChar(char c){
     19bool IsNumberChar(const char c){
    2020    if('0' <= c && c <= '9') return true;
    2121    if('a' <= c && c <= 'f') return true;
    2222    if('A' <= c && c <= 'F') return true;
     23    if(c=='.' || c=='e'||c=='E') return true;
    2324
    2425    return false;
    2526}
    26 BOOL IsJudgMark(char *Command,int p){
     27BOOL IsJudgMark(const char *Command,int p){
    2728    if(Command[p]==1){
    2829        if(Command[p+1]==ESC_AND) return 1;
     
    3334    return 0;
    3435}
    35 BOOL IsNumCalcMark(char *Command,int p){
     36BOOL IsNumCalcMark(const char *Command,int p){
    3637    if(Command[p]=='^'||Command[p]=='*'||Command[p]=='/'||Command[p]=='\\'||
    3738        (Command[p]==1&&Command[p+1]==ESC_MOD)||Command[p]=='+'||Command[p]=='-'||
     
    4142    return 0;
    4243}
    43 BOOL IsNumCalcMark_Back(char *Command,int p){
     44BOOL IsNumCalcMark_Back(const char *Command,int p){
    4445    if(p==0){
    4546        if(Command[p]=='^'||Command[p]=='*'||Command[p]=='/'||Command[p]=='\\'||
     
    5657    return 0;
    5758}
    58 BOOL IsStrCalcMark(char c){
     59BOOL IsStrCalcMark(const char c){
    5960    if(c=='+'||c=='&') return 1;
    6061    return 0;
    6162}
    62 BOOL IsExponent(char *Command,int p){
     63BOOL IsExponent(const char *Command,int p){
    6364    int i,sw;
    6465    for(i=p-2,sw=FALSE;i>=0;i--){
     
    388389}
    389390
    390 int StaticCalculation(bool enableerror, char *Command,int BaseType,_int64 *pi64data,LONG_PTR *plpIndex,BOOL bDebuggingWatchList){
     391int StaticCalculation(bool enableerror, const char *Command,int BaseType,_int64 *pi64data,LONG_PTR *plpIndex,BOOL bDebuggingWatchList){
    391392    extern HANDLE hHeap;
    392393    extern int cp;
     
    13461347}
    13471348
    1348 BYTE GetCalcId(char *Command,int *pi){
     1349BYTE GetCalcId(const char *Command,int *pi){
    13491350    *pi=0;
    13501351
     
    14001401    return 0;
    14011402}
    1402 BOOL GetNumOpeElements(char *Command,int *pnum,
     1403BOOL GetNumOpeElements(const char *Command,int *pnum,
    14031404                       char *values[255],long calc[255],long stack[255]){
    14041405    extern int cp;
  • BasicCompiler_Common/common.h

    r14 r15  
    2929#include "../BasicCompiler_Common/psapi.h"
    3030#include "../BasicCompiler_Common/BreakPoint.h"
    31 #include "../BasicCompiler_Common/LexicalAnalysis.h"
    3231
    3332
     
    154153};
    155154
    156 //#define情報
    157 class CDefine{
    158     int num;
    159     char **ppNames;
    160 public:
    161     CDefine();
    162     ~CDefine();
    163 
    164     BOOL add(char *name);
    165     BOOL undef(char *name);
    166     BOOL check(char *name);
    167 };
    168155
    169156//変数
     
    405392
    406393
    407 int StaticCalculation(bool enableerror, char *Command,int BaseType,_int64 *pi64data,LONG_PTR *plpIndex,BOOL bDebuggingWatchList=0);
     394int StaticCalculation(bool enableerror, const char *Command,int BaseType,_int64 *pi64data,LONG_PTR *plpIndex,BOOL bDebuggingWatchList=0);
    408395
    409396
     
    466453void DeleteConstInfo(CONSTINFO **ppConstHash);
    467454void DeleteDeclareInfo(void);
     455void AddSourceCode(char *buffer);
    468456void OutputExe(void);
    469457int MainThread(DWORD dummy);
     
    487475
    488476//preprocessor.cpp
    489 void DirectiveIfdef(char *buffer);
    490 char *IncludeFiles(char *base);
     477char *OpenBasicFile(char *FileName);
    491478
    492479//Resource.cpp
     
    517504int JumpOneParameter(char *Parameter,int i);
    518505int GetStringInQuotation(char *buffer,char *ReadBuffer);
    519 int GetStringInPare(char *buffer,char *ReadBuffer);
     506int GetStringInPare(char *buffer,const char *ReadBuffer);
    520507int GetStringInPare_RemovePare(char *buffer,char *ReadBuffer);
    521 int GetStringInBracket(char *buffer,char *ReadBuffer);
     508int GetStringInBracket(char *buffer,const char *ReadBuffer);
    522509int JumpStringInPare(char *buffer,int pos);
    523510int JumpStringInBracket(char *buffer,int pos);
     
    531518
    532519//calculation.cpp
    533 bool IsNumberTopChar(char *buffer);
    534 bool IsNumberChar(char c);
    535 BOOL IsNumCalcMark(char *Command,int p);
    536 BOOL IsNumCalcMark_Back(char *Command,int p);
    537 BOOL IsStrCalcMark(char c);
    538 BOOL IsExponent(char *Command,int p);
     520bool IsNumberTopChar(const char *buffer);
     521bool IsNumberChar(const char c);
     522BOOL IsNumCalcMark(const char *Command,int p);
     523BOOL IsNumCalcMark_Back(const char *Command,int p);
     524BOOL IsStrCalcMark(const char c);
     525BOOL IsExponent(const char *Command,int p);
    539526int GetLiteralIndex(_int64 i64data);
    540527int NeutralizationType(int type1,LONG_PTR index1,int type2,LONG_PTR index2);
     
    545532BOOL IsStringSubsituation(CClass *pobj_c);
    546533int IsStrCalculation(char *Command);
    547 BYTE GetCalcId(char *Command,int *pi);
    548 BOOL GetNumOpeElements(char *Command,int *pnum,
     534BYTE GetCalcId(const char *Command,int *pi);
     535BOOL GetNumOpeElements(const char *Command,int *pnum,
    549536                       char *values[255],long calc[255],long stack[255]);
    550537
  • BasicCompiler_Common/preprocessor.cpp

    r14 r15  
    88
    99
     10class CDefine{
     11    int num;
     12    char **ppNames;
     13public:
     14    CDefine();
     15    ~CDefine();
     16
     17    BOOL add(char *name);
     18    BOOL undef(char *name);
     19    BOOL check(char *name);
     20};
    1021CDefine::CDefine(){
    1122    extern HANDLE hHeap;
     
    300311
    301312char *IncludeFiles(char *base){
     313    extern HANDLE hHeap;
    302314    extern char szIncludeDir[MAX_PATH];
    303315    extern char BasicCurDir[MAX_PATH];
     
    423435
    424436            i3=lstrlen(buffer)+FileSize;
    425             base=(char *)realloc(base,i3*2);
     437            base=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,base,i3*2);
    426438            buffer=base+2;
    427439            SlideString(buffer+i2,FileSize+(i-i2));
     
    451463    return base;
    452464}
     465char *OpenBasicFile(char *FileName){
     466    extern HANDLE hHeap;
     467    char *base,*buffer;
     468    DWORD dwFileSize,dwAccBytes;
     469    HANDLE hFile;
     470
     471    //ファイルオープン
     472    hFile=CreateFile(FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
     473    if(hFile==INVALID_HANDLE_VALUE) return 0;
     474
     475    //#define情報を初期化
     476    pobj_define=new CDefine;
     477
     478    //バッファ領域確保
     479    dwFileSize=GetFileSize(hFile,0);
     480    base=(char *)HeapAlloc(hHeap,0,dwFileSize*2+255);
     481    base[0]='\n';
     482    base[1]='\n';
     483    buffer=base+2;
     484    lstrcpy(buffer,"#include <basic.sbp>\n");
     485    buffer+=lstrlen(buffer);
     486
     487    //読み込み
     488    ReadFile(hFile,buffer,dwFileSize,&dwAccBytes,0);
     489    buffer[dwAccBytes]=0;
     490
     491    //CRLFをLFに変換
     492    ChangeReturnCode(buffer);
     493
     494    //コメント削除
     495    DeleteComment(buffer);
     496
     497    //#ifdefディレクティブ
     498    DirectiveIfdef(buffer);
     499
     500    //最終行には文字を含ませないようにする
     501    lstrcat(buffer,"\n");
     502
     503    //ファイルクローズ
     504    CloseHandle(hFile);
     505
     506    //インクルードファイルを読み込む
     507    base=IncludeFiles(base);
     508
     509    //#define情報を破棄
     510    delete pobj_define;
     511    pobj_define=0;
     512
     513    return base;
     514}
Note: See TracChangeset for help on using the changeset viewer.