Example #1
0
 str preprocess(str code)
 {
     //препроцессор: вставляет другие файлы в текст
   str res="";
   unsigned long long int ptr=1,lastptr=1;

    ptr = code.Pos("#");
    if(ptr==0)
            return code;

     while(ptr!=0)
     {

            code=code.SubString(lastptr,code.Length());
            lastptr=1;
             ptr = code.Pos("#");
             if (ptr==0)
             {
                    res=res+code.SubString(lastptr,code.Length());
                    break;
             }
             else
                  res=res+code.SubString(lastptr,ptr-1);

            if(code.SubString(ptr+1,7).UpperCase()=="INCLUDE")
            {

                ptr+=8;
                while(ptr<=code.Length()  && code[ptr]==' ')
                    ptr++;
                str filename ="";
                unsigned long long int tmp=ptr;
                while(tmp<=code.Length()  &&  (code[tmp]!='\r' && code[tmp]!=' ' && code[tmp]!='\n'))
                    filename+=code[tmp++];
                char cstr=0;
                 ifstream f;
                f.open(filename.c_str());

                while(!f.eof())
                   {
                      f.get(cstr);
                      if(!f.eof())
                        res=res+cstr;
                       //memset(strtmp, 0, sizeof(strtmp));

                   }
                   res=res+" ";
                lastptr=tmp;
                f.close();


            }

     }
     //ShowMessage(res);
    return res;

 }
Example #2
0
vector<str> parseCode(str code)
{
    //парсер: разбивает код по пробельным символам и ищет строки
vector<str>  res;
str now;
code=code.Trim();
for(int i=1;i<=code.Length();i++)
{
      if(code[i]!=' ' && code[i]!='\r' && code[i]!='\t' && code[i]!='\n')
      {
        if(code[i]=='\"')
        {
                i++;
                while(i<=code.Length())
                {
                        if(code[i]=='\"' && code[i-1]!='\\')
                                break;
                        now=now+code[i];
                        i++;
                }
                str tmp="";
              //  ShowMessage("0"+now+"0");
                for(int i =1; i<=now.Length();i++)
                {
                   if(now[i]==' ')
                        tmp=tmp+"\\s";

                   else
                        tmp=tmp+now[i];
                }
                now=tmp;
              //  ShowMessage("0"+now+"0");
                res.push_back("STR");


        }
        else
                now=now+code[i];

      }
      else {
           while(i<=code.Length()  && (code[i]==' ' || code[i]=='\t' || code[i]=='\n' || code[i]=='\r'))
                i++;
           i--;
           res.push_back(now.Trim());
           now="";
      }



}
     if(now!="")
        res.push_back(now.Trim());


   return   res;
}
Example #3
0
 str escape(str t)
 {
     //обработка escape последовательностей в строке
    str  res="";
    t=t+" ";
         for(int i=1;i<=t.Length()-1;i++)
                  if(t[i]=='\\' && t[i+1]=='\\')
                          res=res+t[i++] ;
                  else
                  if(t[i]=='\\' && t[i+1]=='n')
                  {
                          res=res+'\n';
                          i++;
                  }
                  else
                   if(t[i]=='\\' && t[i+1]=='s')
                  {
                          res=res+' ';
                          i++;
                  }
                  else
                  if(t[i]=='\\')
                          res=res+t[++i];
                  else
                          res=res+t[i];

        return res;
 }
Example #4
0
     void setCh(unsigned long long int  n,
                        char value)
     {

         if(n>size)
                *s=*s+*new str(" ",n-size);

         (*s)[n]=value;
         size=s->Length();
     }