Exemplo n.º 1
0
vector<AccesorNode*> Parser::AccesorList()
{
    if(currenttoken->type == Period)
    {
        ConsumeToken();
        if(currenttoken->type != Id)
            throw invalid_argument("Se esperaba id.  Row:"+to_string(currenttoken->row)+"Column:"+to_string(currenttoken->column));
        string id=currenttoken->lexeme;
        ConsumeToken();
        vector<AccesorNode*>list=AccesorList();
        list.insert(list.begin(),new FieldAccesorNode(id) );
        return list;
    }
    else if(currenttoken->type == OpenBracket)
    {
        ConsumeToken();
        vector <ExpressionNode*> indexes=ExpressionListNotNull();
        if(currenttoken->type != CloseBracket)
            throw invalid_argument("Se esperaba ].  Row:"+to_string(currenttoken->row)+"Column:"+to_string(currenttoken->column));
        ConsumeToken();
        vector<AccesorNode*> list=AccesorList();
        list.insert(list.begin(),new IndexAccesorNode(indexes));
        return list;
    }
    else
    {
        vector<AccesorNode*> list;
        return list;
    }
}
Exemplo n.º 2
0
Item::Item() :
    itemID(NumberGenerator::random<std::uint32_t>(0u,0xffffffff)),
    container(DataMap()),
    accesorList(AccesorList())
{

}
Exemplo n.º 3
0
vector<AccesorNode*> Parser::VariablePrime()
{
    if(currenttoken->type == OpenParenthesis)
    {
        ConsumeToken();
        vector<ExpressionNode*> parameters=ExpresionListNull();
        if(currenttoken->type != CloseParenthesis)
            throw invalid_argument("Se esperaba ).  Row:"+to_string(currenttoken->row)+"Column:"+to_string(currenttoken->column));
        ConsumeToken();
        vector<AccesorNode*> list;
        list.push_back(new FunctionAccesorNode(parameters));
        return list;
    }
    else
    {
        return AccesorList();
    }
}