Exemplo n.º 1
0
TVariablePtr ExpressionParser::Parse(StringPtrLen str)
{
   CheckBracketBalance(str);

   TVariablePtr variable;
   
   auto assignment = FindWithZeroBalance(str, g_token_assignment);
   if (assignment != nullptr)
   {
      variable = ParseVariableDeclaration(str.Left(assignment));
      str = str.Right(assignment + std::strlen(g_token_assignment));
   }
   else
   {
      // Unnamed variable
      variable = std::make_unique<Variable>();
   }
    
   m_curr_variable = variable.get();
   auto expression = ParseExpression(str);
   m_curr_variable = nullptr;

   NormalizeExpression(expression);
   SimplifyExpression(expression);
   
   variable->SetExpression(std::move(expression));

   return variable;
}
Exemplo n.º 2
0
PHPEntityBase::Ptr_t PHPExpression::Resolve(PHPLookupTable& lookpTable, const wxString& sourceFileName)
{
    if(m_expression.empty()) return PHPEntityBase::Ptr_t(NULL);

    PHPSourceFile source(m_text);
    source.SetParseFunctionBody(true);
    source.SetFilename(sourceFileName);
    source.Parse();
    wxString asString = SimplifyExpression(source, 0);
    
    // Now, use the lookup table
    std::list<PHPExpression::Part>::iterator iter = m_parts.begin();
    PHPEntityBase::Ptr_t currentToken(NULL);
    for(; iter != m_parts.end(); ++iter) {
        if(!currentToken) {
            // first token
            currentToken = lookpTable.FindScope(iter->m_text);
            
        } else {
            // load the children of the current token (optionally, filter by the text)
            currentToken = lookpTable.FindMemberOf(currentToken->GetDbId(), iter->m_text);
        }
        if(!currentToken) {
            // return NULL
            return currentToken;
        }
    }
    return currentToken;
}
Exemplo n.º 3
0
expr_type make_un_op(int op, expr_type expr1)
{
   expr_type e = (expr_type) SafeMalloc(sizeof(expr_struct));
   
   e->type = E_UNARY_OP;
   e->value.unary_opval.exp = expr1;
   e->value.unary_opval.op = op;
   e->lineno = lineno;

   SimplifyExpression(e);
   return e;
}
Exemplo n.º 4
0
expr_type make_bin_op(expr_type expr1, int op, expr_type expr2)
{
   expr_type e = (expr_type) SafeMalloc(sizeof(expr_struct));
   
   e->type = E_BINARY_OP;
   e->value.binary_opval.left_exp = expr1;
   e->value.binary_opval.right_exp = expr2;
   e->value.binary_opval.op = op;
   e->lineno = lineno;

   SimplifyExpression(e);
   return e;
}