private void declaration(Declarations ds, Functions functions) {
		// grab the Type
		Type type = type();
		
		while(currentToken.type() != Token.Type.Eof){
			// grab variable name from current token
			Variable v = new Variable(currentToken.value());
			// skip identifier
			match(Token.Type.Identifier);
			
			if(currentToken.type() == Token.Type.LeftParen){
				function(functions, type, v);
				if(isType())
					type = type();
				else
					break;
			} /*else if(currentToken.type() == Token.Type.Main)
				break;*/
			else{
				Declaration dec = ds.put(v.toString(), new Declaration(v, type));
				if(dec != null){
					System.err.println("Error in parser!");
					System.err.println("Line: " + lexer.lineNumber() + " Col: " + lexer.columnNumber());
					System.err.println("Declaration already exists: " + v.toString());
					System.exit(1);
				}
				// currentToken will be a comma if there's more declarations of this type, skip comma
				if(currentToken.type() == Token.Type.Comma){
					match(Token.Type.Comma);
				}else if(currentToken.type() == Token.Type.Semicolon){
					match(Token.Type.Semicolon);
					if(isType())
						type = type();
					else
						break;
				}
			}
		}
	}