Changeset 14 in dev for BasicCompiler_Common


Ignore:
Timestamp:
Dec 10, 2006, 10:58:26 AM (17 years ago)
Author:
dai_9181
Message:

LexicalAnalysisのベース部分を用意。

Location:
BasicCompiler_Common
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/BasicCompiler.cpp

    r5 r14  
    1 #ifdef _AMD64_
    2 #include "../BasicCompiler64/BasicCompiler.h"
    3 #else
    4 #include "../BasicCompiler32/BasicCompiler.h"
    5 #endif
     1#include "BasicCompiler.h"
     2
    63
    74#if defined HeapAlloc
  • BasicCompiler_Common/BasicCompiler.h

    r12 r14  
    1 #include "../BasicCompiler_Common/common.h"
     1#include "common.h"
    22
    33LPSTR BasicFileFilter="プログラム ファイル(*.ab;*.bas;*.abp;*.sbp)\0*.ab;*.bas;*.abp;*sbp\0テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0";
  • BasicCompiler_Common/DebugMiddleFile.cpp

    r5 r14  
    474474    //ソースコード
    475475    i2++;
    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;
     476    CSource::obj.SetSourceCode(buffer + i2);
     477    this->basbuf=CSource::obj.SourceCode;
    480478    extern char *basbuf;
    481479    basbuf=this->basbuf;
     480    i2+=lstrlen(buffer+i2)+1;
    482481
    483482    //コードと行番号の関係
     
    934933
    935934    //ソースコード
    936     extern char *pBaseBuffer;
    937935    extern char *basbuf;
    938     pBaseBuffer=this->pBaseBuffer;
    939936    basbuf=this->basbuf;
    940937
     
    10161013    DeleteConstInfo(ppConstHash);
    10171014
    1018     //ソースコードを解放
    1019     HeapDefaultFree(pBaseBuffer);
    1020 
    10211015    //コードと行番号の関係を解放
    10221016    HeapDefaultFree(pLineInfo);
  • BasicCompiler_Common/DebugSection.h

    r4 r14  
    2525
    2626    //ソースコード
    27     char *pBaseBuffer;
    2827    char *basbuf;
    2928
  • BasicCompiler_Common/MakeExe.cpp

    r4 r14  
    3434}
    3535
    36 void 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 
    6336void OutputExe(void){
    6437    extern HANDLE hHeap;
    6538    extern char *basbuf;
    66     extern char *pBaseBuffer;
    6739    extern int ErrorNum;
    6840    extern BOOL bStopCompile;
     
    8759    //プログラムをファイルから読み込む
    8860    extern char SourceFileName[MAX_PATH];
    89     pBaseBuffer=OpenBasicFile(SourceFileName);
    90     if(!pBaseBuffer){
    91         SetError(201,SourceFileName,-1);
    92         goto EndCompile;
    93     }
    94     basbuf=pBaseBuffer+2;
     61    CSource::obj.OpenFile(SourceFileName);
     62
     63    //未完成
     64    basbuf = CSource::obj.SourceCode;
    9565
    9666    //イメージベースの設定
     
    172142
    173143    StepCompileProgress();
     144
     145
     146    //字句解析
     147    CSource::obj.LexicalAnalysis(0);
    174148
    175149
     
    291265        HeapDefaultFree(IncludeFileInfo.ppFileNames[i2]);
    292266    HeapDefaultFree(IncludeFileInfo.ppFileNames);
    293 
    294     if(pBaseBuffer) HeapDefaultFree(pBaseBuffer);
    295267}
    296268int MainThread(DWORD dummy){
  • BasicCompiler_Common/calculation.cpp

    r11 r14  
    1010_int64 i64stack[255];
    1111
     12bool IsNumberTopChar(char *buffer){
     13    int c = buffer[0];
     14    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;
     16
     17    return false;
     18}
     19bool IsNumberChar(char c){
     20    if('0' <= c && c <= '9') return true;
     21    if('a' <= c && c <= 'f') return true;
     22    if('A' <= c && c <= 'F') return true;
     23
     24    return false;
     25}
    1226BOOL IsJudgMark(char *Command,int p){
    1327    if(Command[p]==1){
  • BasicCompiler_Common/common.h

    r11 r14  
    1 #define _CRT_SECURE_NO_DEPRECATE
     1//#define _CRT_SECURE_NO_DEPRECATE
     2#pragma warning(disable : 4996)
    23
    34#include <windows.h>
     
    2829#include "../BasicCompiler_Common/psapi.h"
    2930#include "../BasicCompiler_Common/BreakPoint.h"
     31#include "../BasicCompiler_Common/LexicalAnalysis.h"
    3032
    3133
     
    150152    int FilesNum;
    151153    int LineOfFile[MAX_LEN];
     154};
     155
     156//#define情報
     157class CDefine{
     158    int num;
     159    char **ppNames;
     160public:
     161    CDefine();
     162    ~CDefine();
     163
     164    BOOL add(char *name);
     165    BOOL undef(char *name);
     166    BOOL check(char *name);
    152167};
    153168
     
    451466void DeleteConstInfo(CONSTINFO **ppConstHash);
    452467void DeleteDeclareInfo(void);
    453 void AddSourceCode(char *buffer);
    454468void OutputExe(void);
    455469int MainThread(DWORD dummy);
     
    473487
    474488//preprocessor.cpp
    475 char *OpenBasicFile(char *FileName);
     489void DirectiveIfdef(char *buffer);
     490char *IncludeFiles(char *base);
    476491
    477492//Resource.cpp
     
    516531
    517532//calculation.cpp
     533bool IsNumberTopChar(char *buffer);
     534bool IsNumberChar(char c);
    518535BOOL IsNumCalcMark(char *Command,int p);
    519536BOOL IsNumCalcMark_Back(char *Command,int p);
  • BasicCompiler_Common/preprocessor.cpp

    r5 r14  
    88
    99
    10 class CDefine{
    11     int num;
    12     char **ppNames;
    13 public:
    14     CDefine();
    15     ~CDefine();
    16 
    17     BOOL add(char *name);
    18     BOOL undef(char *name);
    19     BOOL check(char *name);
    20 };
    2110CDefine::CDefine(){
    2211    extern HANDLE hHeap;
     
    311300
    312301char *IncludeFiles(char *base){
    313     extern HANDLE hHeap;
    314302    extern char szIncludeDir[MAX_PATH];
    315303    extern char BasicCurDir[MAX_PATH];
     
    435423
    436424            i3=lstrlen(buffer)+FileSize;
    437             base=(char *)HeapReAlloc(hHeap,HEAP_ZERO_MEMORY,base,i3*2);
     425            base=(char *)realloc(base,i3*2);
    438426            buffer=base+2;
    439427            SlideString(buffer+i2,FileSize+(i-i2));
     
    463451    return base;
    464452}
    465 char *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.