Ignore:
Timestamp:
Jul 12, 2007, 2:57:04 AM (17 years ago)
Author:
dai_9181
Message:

コード全体のリファクタリングを実施

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/jenga/src/smoothie/LexicalAnalysis.cpp

    r173 r205  
     1#include <jenga/include/smoothie/SmoothieException.h>
    12#include <jenga/include/smoothie/LexicalAnalysis.h>
     3#include <jenga/include/smoothie/BasicFixed.h>
    24
    35#include <windows.h>
     
    212214    return i;
    213215}
     216
     217bool SplitMemberName( const char *desc, char *object, char *member, ReferenceKind &refType ){
     218    int lastIndex = -1;
     219    for( int i=0; desc[i]; i++ ){
     220        if( desc[i] == '(' ){
     221            i=JumpStringInPare(desc,i+1);
     222            continue;
     223        }
     224        else if( desc[i] == '[' ){
     225            i=JumpStringInBracket(desc,i+1);
     226            continue;
     227        }
     228        else if(desc[i]=='.'||(desc[i]==1&&desc[i+1]==ESC_PSMEM)){
     229            lastIndex = i;
     230        }
     231    }
     232    if( lastIndex == -1 ){
     233        lstrcpy( member, desc );
     234        return false;
     235    }
     236
     237    if(desc[lastIndex]=='.'){
     238        lstrcpy(member,desc+lastIndex+1);
     239        refType = RefDot;
     240    }
     241    else{
     242        lstrcpy(member,desc+lastIndex+2);
     243        refType = RefPointer;
     244    }
     245
     246    if( object ){
     247        lstrcpy( object, desc );
     248        object[lastIndex]=0;
     249    }
     250
     251    return true;
     252}
     253bool SplitMemberName( const char *desc, char *object, char *member ){
     254    ReferenceKind dummyRefType;
     255    return SplitMemberName( desc, object, member, dummyRefType );
     256}
     257
     258char *calcNames[255] = {
     259    "xor",
     260};
     261void InitCalcNames()
     262{
     263    if( calcNames[CALC_XOR] )
     264    {
     265        return;
     266    }
     267
     268    memset( calcNames, 0, 255 * sizeof(char *) );
     269    calcNames[CALC_XOR] = "xor";
     270    calcNames[CALC_OR] = "or";
     271    calcNames[CALC_AND] = "and";
     272    calcNames[CALC_NOT] = "Not";
     273    calcNames[CALC_PE] = "<=";
     274    calcNames[CALC_QE] = ">=";
     275    calcNames[CALC_NOTEQUAL] = "<>";
     276    calcNames[CALC_EQUAL] = "=(compare)";
     277    calcNames[CALC_P] = "<";
     278    calcNames[CALC_Q] = ">";
     279    calcNames[CALC_SHL] = "<<";
     280    calcNames[CALC_SHR] = ">>";
     281    calcNames[CALC_ADDITION] = "+";
     282    calcNames[CALC_SUBTRACTION] = "-";
     283    calcNames[CALC_STRPLUS] = "-";
     284    calcNames[CALC_MOD] = "mod";
     285    calcNames[CALC_PRODUCT] = "*";
     286    calcNames[CALC_QUOTIENT] = "/";
     287    calcNames[CALC_INTQUOTIENT] = "\\";
     288    calcNames[CALC_AS] = "As";
     289    calcNames[CALC_BYVAL] = "ByVal";
     290    calcNames[CALC_MINUSMARK] = "-(mark)";
     291    calcNames[CALC_POWER] = "^";
     292    calcNames[CALC_SUBSITUATION] = "=";
     293    calcNames[CALC_ARRAY_GET] = "[]";
     294    calcNames[CALC_ARRAY_SET] = "[]=";
     295}
     296void GetCalcName(int idCalc,char *name){
     297    InitCalcNames();
     298
     299    if( calcNames[idCalc] == NULL )
     300    {
     301        SmoothieException::Throw();
     302    }
     303    lstrcpy( name, calcNames[idCalc] );
     304}
     305BYTE ToCalcId( const char *name )
     306{
     307    InitCalcNames();
     308
     309    for( int i=0; i<255; i++ )
     310    {
     311        if( calcNames[i] )
     312        {
     313            if( lstrcmp( name, calcNames[i] ) == 0 )
     314            {
     315                return i;
     316            }
     317        }
     318    }
     319    SmoothieException::Throw();
     320    return 0;
     321}
     322
     323std::string Operator_NaturalStringToCalcMarkString( const std::string &name )
     324{
     325    if( name[0] == 1 && name[1] == ESC_OPERATOR )
     326    {
     327        BYTE calcId = ToCalcId( name.c_str()+2 );
     328        char temporary[255];
     329        temporary[0] = name[0];
     330        temporary[1] = name[1];
     331        temporary[2] = calcId;
     332        temporary[3] = 0;
     333        return temporary;
     334    }
     335    return name;
     336}
     337std::string Operator_CalcMarkStringToNaturalString( const std::string &name )
     338{
     339    if( name[0] == 1 && name[1] == ESC_OPERATOR )
     340    {
     341        BYTE calcId = name[2];
     342        char temporary[255], calcName[255];
     343        GetCalcName( calcId, calcName );
     344        temporary[0] = name[0];
     345        temporary[1] = name[1];
     346        lstrcpy( temporary+2, calcName );
     347        return temporary;
     348    }
     349    return name;
     350}
Note: See TracChangeset for help on using the changeset viewer.