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; } }
Item::Item() : itemID(NumberGenerator::random<std::uint32_t>(0u,0xffffffff)), container(DataMap()), accesorList(AccesorList()) { }
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(); } }