Exemple #1
0
PExp TExp::LoadTxtExp(TILx& Lx, const TFSet& Expect){
  PExp Exp=LoadTxtRelExp(Lx, TFSet(Expect)|syQuestion);
  if (Lx.Sym==syQuestion){
    TExpOp ExpOp=GetExpOpFromLxSym(Lx.Sym);
    Lx.GetSym(ExpExpect);
    PExp ThenExp=LoadTxtExp(Lx, TFSet()|syColon);
    Lx.GetSym(ExpExpect);
    PExp ElseExp=LoadTxtExp(Lx, Expect);
    Exp=PExp(new TExp(ExpOp, Exp, ThenExp, ElseExp));
  }
  return Exp;
}
Exemple #2
0
PSchObj TSchObj::LoadTxt(TILx& Lx){
  PSchObj SchObj=PSchObj(new TSchObj());
  Lx.GetVar("SchObj", true, true);
  // Nm
  SchObj->Nm=Lx.GetVarStr("Nm");
  // TaskV
  Lx.GetVar("TaskV", true, true);
  while (!Lx.PeekVarEnd(true, true)){
    PSchTask Task=TSchTask::LoadTxt(Lx);
    SchObj->TaskV.Add(TTmTaskKd(Task->GetStartTm(), Task));
  }
  Lx.GetVarEnd(true, true);
  Lx.GetVarEnd(true, true);
  return SchObj;
}
Exemple #3
0
PExp TExp::LoadTxtAddExp(TILx& Lx, const TFSet& Expect){
  TExpOp PrefExpOp=eoUndef;
  if (Lx.Sym==syPlus){PrefExpOp=eoUPlus; Lx.GetSym(MulExpExpect);}
  else if (Lx.Sym==syMinus){PrefExpOp=eoUMinus; Lx.GetSym(MulExpExpect);}
  PExp Exp=LoadTxtMulExp(Lx, TFSet(Expect)|AddOpSymSet);
  if (PrefExpOp!=eoUndef){
    Exp=PExp(new TExp(PrefExpOp, Exp));}
  while (AddOpSymSet.In(Lx.Sym)){
    TExpOp ExpOp=GetExpOpFromLxSym(Lx.Sym);
    Lx.GetSym(MulExpExpect);
    PExp RExp=LoadTxtMulExp(Lx, TFSet(Expect)|AddOpSymSet);
    Exp=PExp(new TExp(ExpOp, Exp, RExp));
  }
  return Exp;
}
Exemple #4
0
PExp TExp::LoadTxtRelExp(TILx& Lx, const TFSet& Expect){
  PExp Exp=LoadTxtAddExp(Lx, TFSet(Expect)|RelOpSymSet);
  if (RelOpSymSet.In(Lx.Sym)){
    TExpOp ExpOp=GetExpOpFromLxSym(Lx.Sym);
    Lx.GetSym(AddExpExpect);
    PExp RExp=LoadTxtAddExp(Lx, Expect);
    Exp=PExp(new TExp(ExpOp, Exp, RExp));
  }
  return Exp;
}
Exemple #5
0
PExp TExp::LoadTxtMulExp(TILx& Lx, const TFSet& Expect){
  PExp Exp=LoadTxtFact(Lx, TFSet(Expect)|MulOpSymSet);
  while (MulOpSymSet.In(Lx.Sym)){
    TExpOp ExpOp=GetExpOpFromLxSym(Lx.Sym);
    Lx.GetSym(FactExpExpect);
    PExp RExp=LoadTxtFact(Lx, TFSet(Expect)|MulOpSymSet);
    Exp=PExp(new TExp(ExpOp, Exp, RExp));
  }
  return Exp;
}
Exemple #6
0
TPlVal TPlBs::ParseTup(TILx& Lx, const TFSet& Expect, const PPlBs& PlBs){
  IAssert(TupExpect.In(Lx.Sym));
  int FuncId=PlBs->AtomH.AddKey(Lx.Str);
  TPlValV ValV;
  Lx.GetSym(syLParen);
  Lx.GetSym(ExpExpect);
  TPlVal Val=ParseExp(Lx, TFSet()|syComma|syRParen, PlBs);
  ValV.Add(Val);
  while (Lx.Sym==syComma){
    Lx.GetSym(ExpExpect);
    Val=ParseExp(Lx, TFSet()|syComma|syRParen, PlBs);
    ValV.Add(Val);
  }
  Lx.GetSym(Expect);
  // create and store tuple
  PPlTup Tup=TPlTup::New(FuncId, ValV);
  int TupId=PlBs->AddTup(Tup);
  TPlVal TupVal; TupVal.PutTupId(TupId);
  return TupVal;
}
Exemple #7
0
PSch TSch::LoadTxt(TILx& Lx){
  PSch Sch=PSch(new TSch());
  Lx.GetVar("Sch", true, true);
  // Nm
  Sch->Nm=Lx.GetVarStr("Nm");
  // DimV
  Lx.GetVar("DimV", true, true);
  while (!Lx.PeekVarEnd(true, true)){
    Sch->DimV.Add(TSchDim::LoadTxt(Lx));}
  Lx.GetVarEnd(true, true);
  // LastTaskId
  Sch->LastTaskId=Lx.GetVarInt("LastTaskId");
  // IdToTaskH
  Lx.GetVar("IdToTaskH", true, true);
  int Ports=Lx.GetVarInt("Ports");
  Sch->IdToTaskH=TIdToTaskH(Ports);
  while (!Lx.PeekVarEnd(true, true)){
    PSchTask Task=TSchTask::LoadTxt(Lx);
    Sch->IdToTaskH.AddDat(Task->GetTaskId(), Task);
  }
  Lx.GetVarEnd(true, true);
  Lx.GetVarEnd(true, true);
  return Sch;
}
Exemple #8
0
TPlVal TPlBs::ParseExp(TILx& Lx, const TFSet& Expect, const PPlBs& PlBs){
  IAssert(ExpExpect.In(Lx.Sym));
  TPlVal PlVal;
  if (Lx.Sym==syInt){
    PlVal.PutInt(Lx.Int);
    Lx.GetSym(Expect);
  } else
  if (Lx.Sym==syFlt){
    PlVal.PutFlt(Lx.Flt);
    Lx.GetSym(Expect);
  } else
  if (Lx.Sym==syStr){
    if (Lx.PeekSym()==syLParen){
      Fail;
    } else {
      int AtomId=PlBs->AtomH.AddKey(Lx.Str);
      PlVal.PutAtomId(AtomId);
      Lx.GetSym(Expect);
    }
  } else {
    Fail;
  }
  return PlVal;
}
Exemple #9
0
PSchTask TSchTask::LoadTxt(TILx& Lx){
  PSchTask SchTask=PSchTask(new TSchTask());
  Lx.GetVar("SchTask", true, true);
  SchTask->TaskId=Lx.GetVarInt("TaskId");
  Lx.GetVarStrV("DimObjNmV", SchTask->DimObjNmV);
  SchTask->StartTm=Lx.GetVarSecTm("StartTm");
  SchTask->EndTm=Lx.GetVarSecTm("EndTm");
  Lx.GetVarEnd(true, true);
  return SchTask;
}
Exemple #10
0
PExp TExp::LoadTxtFact(TILx& Lx, const TFSet& Expect){
  PExp Exp;
  switch (Lx.Sym){
    case syFlt:{
      PExpVal ExpVal=TExpVal::New(Lx.Flt);
      Exp=PExp(new TExp(ExpVal));
      Lx.GetSym(Expect);
      break;}
    case syIdStr:{
      TStr ExpNm=Lx.Str;
      Lx.GetSym(TFSet(Expect)|syLParen);
      if (Lx.Sym==syLParen){
        TExpV ArgExpV;
        Lx.GetSym(TFSet(ExpExpect)|syRParen);
        while (Lx.Sym!=syRParen){
          if (Lx.Sym==syComma){Lx.GetSym(ExpExpect);}
          PExp ArgExp=LoadTxtExp(Lx, TFSet()|syComma|syRParen);
          ArgExpV.Add(ArgExp);
        }
        Lx.GetSym(Expect);
        Exp=PExp(new TExp(ExpNm, ArgExpV));
      } else {
        Exp=PExp(new TExp(ExpNm));
      }
      break;}
    case syQStr:{
      PExpVal ExpVal=TExpVal::New(Lx.Str);
      Exp=PExp(new TExp(ExpVal));
      Lx.GetSym(Expect);
      break;}
    case syLParen:{
      Lx.GetSym(ExpExpect);
      Exp=LoadTxtExp(Lx, TFSet()|syRParen);
      Exp->IsParen=true;
      Lx.GetSym(Expect);
      break;}
    default: Fail;
  }
  return Exp;
}
Exemple #11
0
PSchDim TSchDim::LoadTxt(TILx& Lx){
  PSchDim SchDim=PSchDim(new TSchDim());
  Lx.GetVar("SchDim", true, true);
  // DimN
  SchDim->DimN=Lx.GetVarInt("DimN");
  // Nm
  SchDim->Nm=Lx.GetVarStr("Nm");
  // NmToObjH
  Lx.GetVar("NmToObjH", true, true);
  int Ports=Lx.GetVarInt("Ports");
  SchDim->NmToObjH=TNmToObjH(Ports);
  while (!Lx.PeekVarEnd(true, true)){
    PSchObj Obj=TSchObj::LoadTxt(Lx);
    SchDim->NmToObjH.AddDat(Obj->GetNm(), Obj);
  }
  Lx.GetVarEnd(true, true);
  Lx.GetVarEnd(true, true);
  return SchDim;
}
Exemple #12
0
PJsonVal TJsonVal::GetValFromLx(TILx& Lx){
  static TFSet ValExpect=TFSet()|syIdStr|syFlt|syQStr|syLBracket|syLBrace|syRBracket;
  PJsonVal Val=TJsonVal::New();
  if ((Lx.Sym==syIdStr)&&(Lx.Str=="null")){
    Val->PutNull(); Lx.GetSym();
  } else if ((Lx.Sym==syIdStr)&&(Lx.Str=="true")){
    Val->PutBool(true); Lx.GetSym();
  } else if ((Lx.Sym==syIdStr)&&(Lx.Str=="false")){
    Val->PutBool(false); Lx.GetSym();
  } else if (Lx.Sym==syFlt){
    Val->PutNum(Lx.Flt); Lx.GetSym();
  } else if (Lx.Sym==syQStr){
    Val->PutStr(Lx.Str); Lx.GetSym();
  } else if (Lx.Sym==syLBracket){
    Val->PutArr(); Lx.GetSym(ValExpect); // added ValExpect to correctly parse arrays of floats
    if (Lx.Sym!=syRBracket){
      forever{
        PJsonVal SubVal=TJsonVal::GetValFromLx(Lx);
        Val->AddToArr(SubVal);
        if (Lx.Sym==syComma){Lx.GetSym(ValExpect);}
        else if (Lx.Sym==syRBracket){break;}
        else {TExcept::Throw("JSON Array not properly formed.");}
      }
    }
Exemple #13
0
void TWebTxtBsTrmSrv::ParseAndExeCmLn(
 const int& CltSockId, TILx& Lx, bool& SendMsgToClt, TChA& MsgChA){
  SendMsgToClt=true;
  if (Lx.UcStr=="TRALALA"){
    MsgChA+=TStr("Hopsasa")+Lx.GetStrToEoln()+"!\r\n";
  } else
  if (Lx.UcStr=="SYSECHO"){
    TStr SysMsgStr=Lx.GetStrToEoln(true).GetUc();
    if (SysMsgStr=="ACCEPT"){
      MsgChA+="\r\n";
      MsgChA+=TStr("      Welcome at WebBird/WebFly Index Engine (V1.0)!\r\n");
      //MsgChA+=TStr("          From:")+GetPeerIpNum()(CltSockId)+"\r\n";
      MsgChA+=TStr("          Time:")+TSecTm::GetCurTm().GetStr()+"\r\n";
      MsgChA+="\r\n";
    } else
    if (SysMsgStr=="CLOSE"){
      SendMsgToClt=false;
    } else {
      MsgChA+=SysMsgStr; MsgChA+="\r\n";
    }
  } else
  if (Lx.UcStr=="ECHO"){
    MsgChA+=Lx.GetStrToEoln(true);
  } else
  if (Lx.UcStr=="HELP"){
    Lx.GetSym(syEof);
    MsgChA+=GetHelpStr();
  } else
  if (Lx.UcStr=="MEM"){
    Lx.GetSym(syEof);
    PSysMemStat MemStat=PSysMemStat(new TSysMemStat());
    MsgChA+=MemStat->GetInfoStr();
  } else
  if (Lx.UcStr=="QUIT"){
    Lx.GetSym(syEof);
    CloseClt(CltSockId);
    SendMsgToClt=false;
  } else
  if (Lx.UcStr=="SET"){
    PPp WebTxtBsPp=WebTxtBs->GetPp();
    Lx.GetSym(syIdStr, syEof);
    if (Lx.Sym==syIdStr){
      TStr PpNm=Lx.UcStr; PPp Pp;
      if (WebTxtBsPp->IsPp(PpNm, Pp)){
        Lx.GetSym(syIdStr, syQStr, syInt, syEof);
        if (Lx.Sym==syEof){
          MsgChA+=Pp->GetStr();
        } else
        if (((Lx.Sym==syIdStr)||(Lx.Sym==syQStr))&&(Pp->GetTag()==ptStr)){
          Pp->PutValStr(Lx.Str);
        } else
        if ((Lx.Sym==syInt)&&(Pp->GetTag()==ptInt)){
          Pp->PutValInt(Lx.Int);
        } else {
          MsgChA+="Error: Bad value type.\r\n";
        }
      } else {
        MsgChA+=TStr("Error: Property '")+PpNm+"' not defined.\r\n";
      }
    } else
    if (Lx.Sym==syEof){
      MsgChA+=WebTxtBsPp->GetStr();
    } else {
      Fail;
    }
  } else
  if (Lx.UcStr=="NEW"){
    Lx.GetSym(syEof);
    TStr FPath; TStr Nm; GetWebTxtBsPp_FPath_Nm(FPath, Nm);
    WebTxtBs->TxtBsNew(Nm, FPath);
  } else
  if (Lx.UcStr=="OPEN"){
    Lx.GetSym(syEof);
    TStr FPath; TStr Nm; GetWebTxtBsPp_FPath_Nm(FPath, Nm);
    WebTxtBs->TxtBsOpenForUpdate(Nm, FPath);
  } else
  if (Lx.UcStr=="CLOSE"){
    Lx.GetSym(syEof);
    WebTxtBs->TxtBsClose();
  } else
  if (Lx.UcStr=="DEL"){
    Lx.GetSym(syEof);
    TStr FPath; TStr Nm; GetWebTxtBsPp_FPath_Nm(FPath, Nm);
    WebTxtBs->TxtBsDel(Nm, FPath);
  } else
  if (Lx.UcStr=="START"){
    Lx.GetSym(syEof);
    TStr FPath; TStr Nm; GetWebTxtBsPp_FPath_Nm(FPath, Nm);
    TStr WebFilterFNm; GetWebTxtBsPp_WebFilterFNm(WebFilterFNm);
    WebTxtBs->FetchStart(Nm, FPath, WebFilterFNm);
  } else
  if (Lx.UcStr=="STOP"){
    Lx.GetSym(syEof);
    WebTxtBs->FetchStop();
  } else
  if (Lx.UcStr=="CONT"){
    Lx.GetSym(syEof);
    TStr FPath; TStr Nm; GetWebTxtBsPp_FPath_Nm(FPath, Nm);
    WebTxtBs->FetchContinue(Nm, FPath);
  } else
  if (Lx.UcStr=="GO"){
    TStr WebFilterFNm=Lx.GetStrToEoln(true);
    WebFilterFNm=TStr::PutFExtIfEmpty(WebFilterFNm, TWebFilter::FExt);
    TStr WebTxtBsFPath=TStr::GetNrFPath(WebFilterFNm.GetFPath());
    TStr WebTxtBsNm=TStr::GetNrFMid(WebFilterFNm.GetFMid());
    WebTxtBs->TxtBsNew(WebTxtBsNm, WebTxtBsFPath);
    WebTxtBs->FetchStart(WebTxtBsNm, WebTxtBsFPath, WebFilterFNm);
  } else
  if (Lx.UcStr=="FETCH"){
    Lx.GetSym(syQStr); TStr ShortcutUrlStr=Lx.Str;
    Lx.GetSym(syInt, syEof); int MxDmSegs=-1;
    if (Lx.Sym==syInt){MxDmSegs=Lx.Int;}
    else {Lx.GetSym(syEof);}
    PUrl StartUrl=TUrl::GetUrlFromShortcut(ShortcutUrlStr, "www", "si");
    if (StartUrl->IsOk(usHttp)){
      // create filter
      PWebFilter WebFilter=PWebFilter(new TWebFilter());
      WebFilter->AddStartUrl(StartUrl->GetUrlStr());
      TStr DmConstrStr=StartUrl->GetDmNm(MxDmSegs);
      WebFilter->AddDmConstr(DmConstrStr);
      // create new web-text-base name
      TStr WebTxtBsFPath; GetWebTxtBsPp_FPath(WebTxtBsFPath);
      TStr WebTxtBsNm(DmConstrStr);
      WebTxtBsNm.ChangeStrAll(".", "-");
      PutWebTxtBsPp(TWebTxtBs::PpNm_WebTxtBsNm, WebTxtBsNm);
      // save filter to file
      TStr WebFilterFPath; GetWebTxtBsPp_FPath(WebFilterFPath);
      TStr WebFilterFNm=WebFilterFPath+WebTxtBsNm+TWebFilter::FExt;
      WebFilter->SaveTxt(WebFilterFNm);
      PutWebTxtBsPp(TWebTxtBs::PpNm_WebFilterFNm, WebFilterFNm);
      // create new web-text-base name
      WebTxtBs->TxtBsNew(WebTxtBsNm, WebTxtBsFPath);
      WebTxtBs->FetchStart(WebTxtBsNm, WebTxtBsFPath, WebFilterFNm);
    } else {
      MsgChA+=TStr("Error: Invalid url shortcut '")+ShortcutUrlStr+"'.\r\n";
    }
  } else
  if (Lx.UcStr=="STAT"){
    Lx.GetSym(syEof);
    WebTxtBs->ReportStatus();
  } else
  if (Lx.UcStr=="SOCKS"){
    Lx.GetSym(syEof);
    WebTxtBs->ReportSocks();
  } else
  if (Lx.UcStr=="HOSTS"){
    Lx.GetSym(syEof);
    WebTxtBs->ReportHosts();
  } else
  if (Lx.UcStr=="QUEUE"){
    Lx.GetSym(syInt, syEof); int ShowLen=10;
    if (Lx.Sym==syInt){ShowLen=Lx.Int;}
    else {Lx.GetSym(syEof);}
    WebTxtBs->ReportQueue(ShowLen);
  } else
  if (Lx.UcStr=="SEARCH"){
    TStr QueryStr=Lx.GetStrToEoln(true);
    WebTxtBs->ReportSearch(QueryStr);
  } else {
    MsgChA+="Error: Bad command keyword ("+Lx.UcStr+").\r\n";
  }
}
Exemple #14
0
TSecTm TSecTm::LoadTxt(TILx& Lx){
  return TSecTm(Lx.GetInt());
}